Godot GDScript 15 「回転 軸 3パターン」
ヘッドをグルグルさせることが出来たので、ここで物体を回転させるのに意識しておくべき3つの軸、「1.原点の軸」、「2.親の軸」、「3.自分自身の軸」について書いておこうと思う。
ちっこいカメラのマークの所が原点。赤線(横)はx軸、青線(縦)はz軸。2つのキューブは親子関係になっている。
1. global_rotate()
は原点の軸で
ゲーム世界の中心が持ってる軸、いわゆるグローバル軸。グローバルで回すにはglobal_rotate()
でいい。これはとっても簡単、分かりやすい。子をx軸で回すとこう。
global_rotate(Vector3(1, 0, 0), my_spd * delta)
2. rotate()
は親の軸で
これにちょっと迷った。親子関係があった場合、どうも、親の持ってる軸で回すようだ。(でも、APIの説明読むと、ローカルって書いてあるんだよね。) 親がなければ、原点軸、つまりグローバルで回る。2つめみたいに、軸決めで回す表現もある。子をx軸で回すとこう。
rotate(Vector3(1, 0, 0), my_spd * delta) rotate_x(my_spd * delta)
3. rotate_object_local()
は自分自身の軸で
コレがローカル軸だと思うんだけど。違うか? 自分自身が持っている軸で回る。子をx軸で回すとこう。
rotate_object_local(Vector3(1, 0, 0), my_spd * delta)
変数で決め打ちする時も、この軸。
rotation.x = rotation.x + my_spd * delta
まとめ
ローカルで回そうとして、rotate()
やrotate_x()
を使ってはダメ。親の持ってる軸で回ってしまう。最初バグかと思ったけど、こういう事だったんだね。
俺なら、"rotate_global"、"rotate_parent"、"rotate_local"とかにするけど。ダメか? ・・・ダメか。