2024/12/24(火) [n年前の日記]
#1 [godot] ピンがある方向に自動で向く処理を入れてみた
_昨日
に続き、Windows10 x64 22H2 + Godot Engine 4.3 64bit でゴルフゲームっぽいものが作れないものかなと試してる。
ボールが打てる状態になったら、目標角度がピンのある方向に自動で向く処理を入れてみた。これで、スペースキーを叩いてパワーだけを決めればサクサク進む状態になった。
Godot Engine の GDScript には atan2() があるので、それを使えば角度を求められる。今回は x-z平面上だけで角度を考えればいいから、これで充分だろう…。Vector3 のメソッドの中に、似たようなものがありそうな気もしているけれど…。
ただ、目標座標 = ピンの座標をどうやって指定するかで考え込んでしまった。blender上であらかじめ指定できたらいいのかもしれないけれど、エクスポートした際にどんな情報をピン座標として渡せばいいのかで悩んでしまって…。例えばemptyオブジェクトを渡せたりするのだろうか? どうなんだろう…。
結局、Godot Engine上で Node3D を1つ追加して、目視でピンの位置に置いて済ませてしまった。目的は果たせるけれど、作業手順としてはかなりダサい気もする…。
もう一点、ボールがピンを飛び越えて、ほとんど真後ろに目標角度を変更する時の、カメラの追従の仕方がどうもしっくりこない。注視点座標とカメラ座標が、若干遅れて本来の座標まで変化するようにしてあるけれど、真後ろを向こうとした時は画面の見た目がギョロン(?)と変わってしまう。その動きは…違うんだよな…。カメラの動きを決定する際、角度を管理する変数も入れてみたほうがいいのかもしれない。
さておき、これでゲームっぽく見える仕様はそこそこ入ったので、地形モデルデータをもう少し修正しつつ、木を作って配置してみようかなと。
しかし、どういう木のモデルデータを作るべきか…。さすがに今時ビルボードは無いよな…。
ちなみに、PS1のみんなのゴルフでは木はビルボードだったけど、PS2版ではポリゴンモデルになってた記憶がある。観客はビルボードだったけど。
ボールが打てる状態になったら、目標角度がピンのある方向に自動で向く処理を入れてみた。これで、スペースキーを叩いてパワーだけを決めればサクサク進む状態になった。
Godot Engine の GDScript には atan2() があるので、それを使えば角度を求められる。今回は x-z平面上だけで角度を考えればいいから、これで充分だろう…。Vector3 のメソッドの中に、似たようなものがありそうな気もしているけれど…。
func set_dir_to_pin(): var d = pinposition.global_position - global_position var ang = rad_to_deg(atan2(d.z, d.x)) dir_ang = ang + 90
ただ、目標座標 = ピンの座標をどうやって指定するかで考え込んでしまった。blender上であらかじめ指定できたらいいのかもしれないけれど、エクスポートした際にどんな情報をピン座標として渡せばいいのかで悩んでしまって…。例えばemptyオブジェクトを渡せたりするのだろうか? どうなんだろう…。
結局、Godot Engine上で Node3D を1つ追加して、目視でピンの位置に置いて済ませてしまった。目的は果たせるけれど、作業手順としてはかなりダサい気もする…。
もう一点、ボールがピンを飛び越えて、ほとんど真後ろに目標角度を変更する時の、カメラの追従の仕方がどうもしっくりこない。注視点座標とカメラ座標が、若干遅れて本来の座標まで変化するようにしてあるけれど、真後ろを向こうとした時は画面の見た目がギョロン(?)と変わってしまう。その動きは…違うんだよな…。カメラの動きを決定する際、角度を管理する変数も入れてみたほうがいいのかもしれない。
さておき、これでゲームっぽく見える仕様はそこそこ入ったので、地形モデルデータをもう少し修正しつつ、木を作って配置してみようかなと。
しかし、どういう木のモデルデータを作るべきか…。さすがに今時ビルボードは無いよな…。
ちなみに、PS1のみんなのゴルフでは木はビルボードだったけど、PS2版ではポリゴンモデルになってた記憶がある。観客はビルボードだったけど。
[ ツッコむ ]
以上です。