位置・向き・速度・加速度の取得

最終更新:

30pin

- view
管理者のみ編集可
'08/10/18

┼ 位置・向き・速度・加速度の取得

概要

  • 位置・向き・速度・加速度の取得方法を探る。


エンティティの位置や運動の状態を取得出来れば、目標地点・戦術・制限などを動的に変更する事ができ、ゲーム性に幅が出来るのではないだろうか。

  • EntityPos

上三つの出力はよく使用されると思うので、その他の出力ポートについて説明する。

EntityPos 出力ポート
ポート名 意味
fwdDir 前方向の単位ベクトル成分
rightDir 右方向の単位ベクトル成分
upDir 上方向の単位ベクトル成分

エンティティの原点を始点とする前・右・上方向の単位ベクトル成分が出力される。
つまり、原点から各方向へ 1m 先の座標をあらわす事になる。


これは World 座標系を基にするので、上の画像の AI で言うと、前方向が Y軸 に対して 180°回転した向きになっているので、fwdDir は(0,-1,0) となる。


  • GetPos

トリガによって値が出力される EntityPos 。 EntityPos ノードは、少しでもエンティティに変化があれば値が出力されるので、リアルタイムに状態を知りたい場合に役立つが、そうでない場合は GetPos ノードを使用した方がフローグラフがスマートになる。


  • Dynamics

Dynamics 出力ポートと対応表 (○:確実に動作、×:動作が怪しい)
ポート名 意味 AI・プレイヤー ※6 車両 RigidBody
v 速度ベクトル成分 ( m / s )
a 加速度ベクトル成分 ( m / s2 × ※2 △ ※3
w 角速度 ( rad / s )
wa 角加速度 ( rad / s2 ※5) × ※1 × ※2 △ ※4
※1 反応なし
※2 オブジェクトが受ける力(重力や遠心力)を出力している様子
※3 地面や他の物に触れている時は○、持っている時や空中では×(※2 に似る)
※4 正常なのかもしれない
※5 角加速度の単位は推測
※6 死体(Ragdoll)は Rigidbody に似る

一応、読んで字の如くの値を出力するためのノードの様であるが、期待したものとは違った結果が得られる場合が多々あった為、上記の様に対応表形式にしてみた。

上記の表で×と表記していても、何らかの値を出力している場合がある。
この件についての詳細は、後日別項目を設ける予定。

このノードの速度・加速度は world 座標系のベクトル成分として出力され、角速度・(角加速度はおそらく) 各回転軸の回転速度・加速度を ( X , Y , Z ) のフォーマットで出力している。

下図は、主に Y軸 方向にプレーヤーを歩かせた場合の速度の出力をグラフ化したもの。

このノードから、向きを持たない「速さ」を得たい場合は、さらに加工が必要となる。


  • 平面の速さを測る
画像をクリックすると別窓で拡大します

平面の速さを測定する為に組んだフローグラフ
入力(左端) 意味
Dynamics 測定対象のエンティティ
出力ポート(右端)  
out 速さ ( m / s )
高低差は無視しているので、必要な場合は次の 「空間の速さを測る」 を用いる。

Dynamics ノードを用い、ピタゴラスの定理からの解法をそのままフローグラフに置き換えたもので、Power=2 が2乗、Sqrt がルートとなる。

距離の項目で使う予定だった為、画像に違和感があるかと思います ヽ(´o`;

※注意 : リアルタイムの出力となるが、タイムラグが発生する可能性がある。この長さは環境によって変わる可能性がある為、一概には言えないが、0.5 秒程度としておく。


  • 空間の速さを測る
画像をクリックすると別窓で拡大します
'08/10/25
この項目のフローグラフに間違いが有りましたので、正しいものに差し替えました。
以前との差分は「正誤記録ページ」にて掲示させて頂いております。

平面の速さ測定に Z軸 成分も反映させたもの
入力(左端) 意味
Dynamics 測定対象のエンティティ
出力ポート(右下端)  
out 速さ ( m / s )

Blocker ノードは X,Y の値を計算中に、別の組の Z が入らない様にする為のもの。
また、Blocker の下の Any は Block を遅延させる為に挿入している。ToBoolean の out をそのまま Block につなぐと、値が何も入って来なくなる。

※注意 : 0.5 秒程度のタイムラグが発生する。


  • 平面の距離を測る
画像をクリックすると別窓で拡大します

A,B 2点間の平面の距離を測定する為に組んだフローグラフ
入力ポート(左端) 意味
A= 原点となる座標
B= 計りたい地点の座標
出力ポート(右端)  
out 距離
単位は入力するものによるが、基本は m
A= ,B= は入れ替わっても問題ない。
高低差は無視しているので、必要な場合は次の 「空間の距離を測る」 を用いる。

※注意 : 0.5 秒程度のタイムラグが発生する。


  • 空間の距離を測る
画像をクリックすると別窓で拡大します
'08/10/25
この項目のフローグラフに間違いが有りましたので、正しいものに差し替えました。
以前との差分は「正誤記録ページ」にて掲示させて頂いております。

平面距離測定に高低差も反映させたもの
入力ポート(左端) 意味
A= 原点となる座標
B= 計りたい地点の座標
出力ポート(右下端)  
out 距離
単位は入力するものによるが、基本は m
A= ,B= は入れ替わっても問題ない。

※注意 : 0.5 秒程度のタイムラグが発生する。


今回は特にまとめるのに非常に苦戦した。
出来上がってみれば、何の変哲も無い内容だったし、不完全な所もある…。

出来るだけ正確な表現に勤めたつもりだが、基礎学力が貧弱な為、無茶苦茶かもしれない。






┼ ┼ 













記事メニュー
目安箱バナー