2024/12/11(水) [n年前の日記]
#1 [godot] Godot Engineでゴルフゲームっぽいものが作れそうか実験中
ゴルフゲームについて調べてるうちに、今時のゲーム制作ツールを使えば比較的楽に作れたりしないのかな、どうなんだろうと気になってきた。
そんなわけで、無料で利用できるゲームエンジン、Godot Engine を試用して実験してみることにした。
環境は Windows10 x64 22H2 + Godot Engine 4.3。
そんなわけで、無料で利用できるゲームエンジン、Godot Engine を試用して実験してみることにした。
環境は Windows10 x64 22H2 + Godot Engine 4.3。
◎ Godot Engineの入手 :
Godot Engine は以下から入手できる。
_Download for Windows - Godot Engine
最初は32bit版の Godot_v4.3-stable_win32.exe.zip (Windows - x86_32) を使ってみたけれど、blender からエクスポートしたモデルデータ(.glb、.fbx)がインポートできずに Godot Engine が落ちて落ちて落ちまくる不具合に遭遇して困ってしまった。.obj ならインポートできるのだけどな…。32bit版のバグなのか、それとも Godot 4.3 のバグなのか。
64bit版の Godot_v4.3-stable_win64.exe.zip (Windows - x86_64) を使ってみたら、.glb も .fbx もすんなりインポートできてしまった。インポートできなかったのは32bit版特有のバグらしい。どうやら 64bit版を使ったほうがハマらずに済むようだなと…。
さておき。解凍すると以下の2つのファイルが入ってる。
*_console.exe は、DOS窓(コマンドプロンプトウインドウ)が開いた状態で動作する版。DOS窓上に何か警告メッセージが表示されている時があるので、自分は *_console.exe を使ってる。
ひとまず、適当な名前でプロジェクトを新規作成。
_Download for Windows - Godot Engine
最初は32bit版の Godot_v4.3-stable_win32.exe.zip (Windows - x86_32) を使ってみたけれど、blender からエクスポートしたモデルデータ(.glb、.fbx)がインポートできずに Godot Engine が落ちて落ちて落ちまくる不具合に遭遇して困ってしまった。.obj ならインポートできるのだけどな…。32bit版のバグなのか、それとも Godot 4.3 のバグなのか。
64bit版の Godot_v4.3-stable_win64.exe.zip (Windows - x86_64) を使ってみたら、.glb も .fbx もすんなりインポートできてしまった。インポートできなかったのは32bit版特有のバグらしい。どうやら 64bit版を使ったほうがハマらずに済むようだなと…。
さておき。解凍すると以下の2つのファイルが入ってる。
Godot_v4.3-stable_win64.exe Godot_v4.3-stable_win64_console.exeどちらかを実行すると、Godot Engine の画面が表示される。
*_console.exe は、DOS窓(コマンドプロンプトウインドウ)が開いた状態で動作する版。DOS窓上に何か警告メッセージが表示されている時があるので、自分は *_console.exe を使ってる。
ひとまず、適当な名前でプロジェクトを新規作成。
◎ 3Dゲームっぽい画面の基礎 :
Godot Engine は、ノードと呼ばれるオブジェクトを追加していくことでゲームが作れる。
とりあえず、最低限の3Dゲームっぽい画面に見えてくれそうなノード構成を試してみた。
一応ざっくり説明。読み飛ばし推奨。
前述のようにノードを配置すると、Godot Engine の画面上では以下のような見た目になる。(箱のサイズ等は弄ってる)
画面右上の右向きの三角をクリックするか、F5キーを押せば実行できる。最初の実行時は「メインシーンが指定されてないけどどうする?」みたいなダイアログが開くけど、現在開いているシーンを使う、的な選択肢を選べばOK。
以下のような実行画面が表示された。画面内に、MeshInstance3D で指定したソレが表示されている。
そして、StaticBody3D を登録してあるので、この板はピクリとも動かない…。
とりあえず、最低限の3Dゲームっぽい画面に見えてくれそうなノード構成を試してみた。
- 画面左上にあるシーンタブの、左上の「+」ボタンをクリックすればノードを追加できる。
- 各ノードはドラッグアンドドロップで位置や階層を変更できる。
Node3D ├─ Camera3D ├─ DirectionalLight3D └─ StaticBody3D ├─ MeshInstance3D └─ CollisionShape3D
一応ざっくり説明。読み飛ばし推奨。
- Node3D は、3Dのオブジェクトの基礎となるノード。Godot 3.x では Spatial というノード名だったけど、4.x では Node3D に置き換わった。たぶん。
- Camera3D は、カメラ担当ノード。Godot Engine で3Dゲームっぽいものを作ろうとする場合、必ずカメラが必要になる。これを追加し忘れて、実行しても画面に何も出なくておかしいなー変だなーと悩むのは Godot Engine のあるあるネタ。
- DirectionalLight3D は平行光源。太陽の光の向きを指定するというか…。一方向から平行に照明を当ててくれる。
- StaticBody3D は、画面内で静止している物体を入れておくノード。地面とか床とか壁とか、その世界の中で動かないものを担当する。更に StaticBody3D は、見た目を担当するノードと、コリジョン(アタリ判定、衝突判定)を担当するノード、2種類のノードを含めることになる(子ノードとして登録する)。
- MeshInstance3D は、表示されるポリゴンモデルデータを担当するノード。見てくれ担当。
- CollisionShape3D は、コリジョン/アタリ判定のための領域を指定するノード。アタリ範囲担当。
前述のようにノードを配置すると、Godot Engine の画面上では以下のような見た目になる。(箱のサイズ等は弄ってる)
画面右上の右向きの三角をクリックするか、F5キーを押せば実行できる。最初の実行時は「メインシーンが指定されてないけどどうする?」みたいなダイアログが開くけど、現在開いているシーンを使う、的な選択肢を選べばOK。
以下のような実行画面が表示された。画面内に、MeshInstance3D で指定したソレが表示されている。
そして、StaticBody3D を登録してあるので、この板はピクリとも動かない…。
◎ 物理計算するオブジェクトを追加する :
重力が影響して落ちていくオブジェクトを追加したい。そんな時は、RigidBody3D ノードを使う。
今回は、RigidBody3D の子ノードの MeshInstance3D や CollisionShape3D に、球(SphereMesh、SphereShape3D) を指定してみた。
実行すると以下のようになる。
球が、重力で落ちていって、StaticBody3D の板の上で止まっていることが分かる。
これで、最低限、物理計算で何かが動いてるっぽい感じの画面は作れた。これをアップグレードして、それらしいゲーム画面を作っていく。
Node3D ├─ Camera3D ├─ DirectionalLight3D ├─ StaticBody3D │ ├─ MeshInstance3D │ └─ CollisionShape3D └─ RigidBody3D ├─ MeshInstance3D └─ CollisionShape3D
今回は、RigidBody3D の子ノードの MeshInstance3D や CollisionShape3D に、球(SphereMesh、SphereShape3D) を指定してみた。
実行すると以下のようになる。
球が、重力で落ちていって、StaticBody3D の板の上で止まっていることが分かる。
これで、最低限、物理計算で何かが動いてるっぽい感じの画面は作れた。これをアップグレードして、それらしいゲーム画面を作っていく。
◎ 補足。組み込みの形状を指定する流れ :
見てくれを担当するノード、MeshInstance3D は、あらかじめ簡単な形状を組み込みで持っている。その組み込み形状を選ぶ操作もメモしておく。
MeshInstance3D ノードを選んでる状態で、画面右端のインスペクタータブで形状を選ぶ。Mesh という項目が「空」になっているはずなので、その右の下向きの三角?をクリック。
選べる形状がずらりと表示される。
Box は箱。Sphere は球。アイコンを見れば、大体の形は想像できるかな…。
BoxMesh を選んでみた。箱が表示される。この箱の大きさを指定したい。箱のアイコン?をクリック。
変更できる項目がずらりと表示される。
Size を変更してみた。大きさが変わって、箱が板のような見た目になってくれた。
同様に、コリジョン形状も選択することができる。CollisionShape3D を選んだ状態で、インスペクタータブを操作する。Shape が空になっているのでクリック。
これも選べる形状がずらりと表示される。
BoxShape3D を選んでみた。これも大きさを変更できる。BoxShape3D と表示されてるところをクリック。
これも、Size を変更することで大きさを変えられる。先ほど MeshInstance3D で指定した値と同じにしておけば、表示されている箱(板?)と同じサイズのコリジョン範囲を指定できる。
MeshInstance3D ノードを選んでる状態で、画面右端のインスペクタータブで形状を選ぶ。Mesh という項目が「空」になっているはずなので、その右の下向きの三角?をクリック。
選べる形状がずらりと表示される。
Box は箱。Sphere は球。アイコンを見れば、大体の形は想像できるかな…。
BoxMesh を選んでみた。箱が表示される。この箱の大きさを指定したい。箱のアイコン?をクリック。
変更できる項目がずらりと表示される。
Size を変更してみた。大きさが変わって、箱が板のような見た目になってくれた。
同様に、コリジョン形状も選択することができる。CollisionShape3D を選んだ状態で、インスペクタータブを操作する。Shape が空になっているのでクリック。
これも選べる形状がずらりと表示される。
BoxShape3D を選んでみた。これも大きさを変更できる。BoxShape3D と表示されてるところをクリック。
これも、Size を変更することで大きさを変えられる。先ほど MeshInstance3D で指定した値と同じにしておけば、表示されている箱(板?)と同じサイズのコリジョン範囲を指定できる。
[ ツッコむ ]
以上です。