mieki256's diary



2024/12/11(水) [n年前の日記]

#1 [godot] Godot Engineでゴルフゲームっぽいものが作れそうか実験中

ゴルフゲームについて調べてるうちに、今時のゲーム制作ツールを使えば比較的楽に作れたりしないのかな、どうなんだろうと気になってきた。

そんなわけで、無料で利用できるゲームエンジン、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つのファイルが入ってる。
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ゲームっぽい画面に見えてくれそうなノード構成を試してみた。
  • 画面左上にあるシーンタブの、左上の「+」ボタンをクリックすればノードを追加できる。
  • 各ノードはドラッグアンドドロップで位置や階層を変更できる。

godot3dtake01_ss01.png
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 の画面上では以下のような見た目になる。(箱のサイズ等は弄ってる)

godot3dtake01_ss02.png


画面右上の右向きの三角をクリックするか、F5キーを押せば実行できる。最初の実行時は「メインシーンが指定されてないけどどうする?」みたいなダイアログが開くけど、現在開いているシーンを使う、的な選択肢を選べばOK。

godot3dtake01_ss14.png


以下のような実行画面が表示された。画面内に、MeshInstance3D で指定したソレが表示されている。

godot3dtake01_ss03.png


そして、StaticBody3D を登録してあるので、この板はピクリとも動かない…。

物理計算するオブジェクトを追加する :

重力が影響して落ちていくオブジェクトを追加したい。そんな時は、RigidBody3D ノードを使う。

godot3dtake01_ss04.png
Node3D
├─ Camera3D
├─ DirectionalLight3D
├─ StaticBody3D
│   ├─ MeshInstance3D
│   └─ CollisionShape3D
└─ RigidBody3D
     ├─ MeshInstance3D
     └─ CollisionShape3D

今回は、RigidBody3D の子ノードの MeshInstance3D や CollisionShape3D に、球(SphereMesh、SphereShape3D) を指定してみた。

実行すると以下のようになる。




球が、重力で落ちていって、StaticBody3D の板の上で止まっていることが分かる。

これで、最低限、物理計算で何かが動いてるっぽい感じの画面は作れた。これをアップグレードして、それらしいゲーム画面を作っていく。

補足。組み込みの形状を指定する流れ :

見てくれを担当するノード、MeshInstance3D は、あらかじめ簡単な形状を組み込みで持っている。その組み込み形状を選ぶ操作もメモしておく。

MeshInstance3D ノードを選んでる状態で、画面右端のインスペクタータブで形状を選ぶ。Mesh という項目が「空」になっているはずなので、その右の下向きの三角?をクリック。

godot3dtake01_ss05.png


選べる形状がずらりと表示される。

godot3dtake01_ss06.png

Box は箱。Sphere は球。アイコンを見れば、大体の形は想像できるかな…。


BoxMesh を選んでみた。箱が表示される。この箱の大きさを指定したい。箱のアイコン?をクリック。

godot3dtake01_ss07.png


変更できる項目がずらりと表示される。

godot3dtake01_ss08.png


Size を変更してみた。大きさが変わって、箱が板のような見た目になってくれた。

godot3dtake01_ss09.png


同様に、コリジョン形状も選択することができる。CollisionShape3D を選んだ状態で、インスペクタータブを操作する。Shape が空になっているのでクリック。

godot3dtake01_ss10.png


これも選べる形状がずらりと表示される。

godot3dtake01_ss11.png


BoxShape3D を選んでみた。これも大きさを変更できる。BoxShape3D と表示されてるところをクリック。

godot3dtake01_ss12.png


これも、Size を変更することで大きさを変えられる。先ほど MeshInstance3D で指定した値と同じにしておけば、表示されている箱(板?)と同じサイズのコリジョン範囲を指定できる。

godot3dtake01_ss13.png

以上です。

過去ログ表示

Prev - 2024/12 -
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project