位置・向き・速度・加速度の取得
最終更新:
30pin
-
view
'08/10/18
┼ 位置・向き・速度・加速度の取得
概要
- 位置・向き・速度・加速度の取得方法を探る。
エンティティの位置や運動の状態を取得出来れば、目標地点・戦術・制限などを動的に変更する事ができ、ゲーム性に幅が出来るのではないだろうか。
- EntityPos
上三つの出力はよく使用されると思うので、その他の出力ポートについて説明する。
EntityPos 出力ポート
ポート名 | 意味 |
fwdDir | 前方向の単位ベクトル成分 |
rightDir | 右方向の単位ベクトル成分 |
upDir | 上方向の単位ベクトル成分 |
エンティティの原点を始点とする前・右・上方向の単位ベクトル成分が出力される。
つまり、原点から各方向へ 1m 先の座標をあらわす事になる。
つまり、原点から各方向へ 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 に似る
※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 秒程度としておく。
平面の速さ測定に Z軸 成分も反映させたもの
入力(左端) | 意味 |
Dynamics | 測定対象のエンティティ |
出力ポート(右下端) | |
out | 速さ ( m / s ) |
Blocker ノードは X,Y の値を計算中に、別の組の Z が入らない様にする為のもの。
また、Blocker の下の Any は Block を遅延させる為に挿入している。ToBoolean の out をそのまま Block につなぐと、値が何も入って来なくなる。
また、Blocker の下の Any は Block を遅延させる為に挿入している。ToBoolean の out をそのまま Block につなぐと、値が何も入って来なくなる。
※注意 : 0.5 秒程度のタイムラグが発生する。
- 平面の距離を測る
画像をクリックすると別窓で拡大します
A,B 2点間の平面の距離を測定する為に組んだフローグラフ
入力ポート(左端) | 意味 |
A= | 原点となる座標 |
B= | 計りたい地点の座標 |
出力ポート(右端) | |
out | 距離 |
単位は入力するものによるが、基本は m
A= ,B= は入れ替わっても問題ない。
高低差は無視しているので、必要な場合は次の 「空間の距離を測る」 を用いる。
A= ,B= は入れ替わっても問題ない。
高低差は無視しているので、必要な場合は次の 「空間の距離を測る」 を用いる。
※注意 : 0.5 秒程度のタイムラグが発生する。
平面距離測定に高低差も反映させたもの
入力ポート(左端) | 意味 |
A= | 原点となる座標 |
B= | 計りたい地点の座標 |
出力ポート(右下端) | |
out | 距離 |
単位は入力するものによるが、基本は m
A= ,B= は入れ替わっても問題ない。
A= ,B= は入れ替わっても問題ない。
※注意 : 0.5 秒程度のタイムラグが発生する。
今回は特にまとめるのに非常に苦戦した。
出来上がってみれば、何の変哲も無い内容だったし、不完全な所もある…。
出来上がってみれば、何の変哲も無い内容だったし、不完全な所もある…。
出来るだけ正確な表現に勤めたつもりだが、基礎学力が貧弱な為、無茶苦茶かもしれない。
┼ ┼