俺に解るように説明する "Godot Engine 3.x" 入門+

ゲームエンジン Godot Engine に関すること。入門とか使い方とかチュートリアルとか、あれとかこれとか。日本語解説。

Godot GDScript 15 「回転 軸 3パターン」

ヘッドをグルグルさせることが出来たので、ここで物体を回転させるのに意識しておくべき3つの軸、「1.原点の軸」、「2.親の軸」、「3.自分自身の軸」について書いておこうと思う。
f:id:ore2wakaru:20180330203403p:plain
ちっこいカメラのマークの所が原点。赤線(横)はx軸、青線(縦)はz軸。2つのキューブは親子関係になっている。


1. global_rotate()は原点の軸で

ゲーム世界の中心が持ってる軸、いわゆるグローバル軸。グローバルで回すにはglobal_rotate()でいい。これはとっても簡単、分かりやすい。子をx軸で回すとこう。

global_rotate(Vector3(1, 0, 0), my_spd * delta)

f:id:ore2wakaru:20180330211150p:plain


2. rotate()は親の軸で

これにちょっと迷った。親子関係があった場合、どうも、親の持ってる軸で回すようだ。(でも、APIの説明読むと、ローカルって書いてあるんだよね。) 親がなければ、原点軸、つまりグローバルで回る。2つめみたいに、軸決めで回す表現もある。子をx軸で回すとこう。

rotate(Vector3(1, 0, 0), my_spd * delta)
rotate_x(my_spd * delta)

f:id:ore2wakaru:20180330210139p:plain


3. rotate_object_local()は自分自身の軸で

コレがローカル軸だと思うんだけど。違うか? 自分自身が持っている軸で回る。子をx軸で回すとこう。

rotate_object_local(Vector3(1, 0, 0), my_spd * delta)

f:id:ore2wakaru:20180330211035p:plain

変数で決め打ちする時も、この軸。

rotation.x = rotation.x + my_spd * delta


まとめ

ローカルで回そうとして、rotate()rotate_x()を使ってはダメ。親の持ってる軸で回ってしまう。最初バグかと思ったけど、こういう事だったんだね。

俺なら、"rotate_global"、"rotate_parent"、"rotate_local"とかにするけど。ダメか? ・・・ダメか。