CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Godot Engine 4.2.1でGameObject.Find相当を実行する方法、他

久しぶりにGodot Engineを調べています。

解説動画の通りに進めてもうまくいかない箇所があり、備忘録として残しました。

1. UnityのGameObject.Find相当を使って、任意のノードを取得したい

Godot Engineでは、Unityでいうオブジェクトはノードと呼びます。あるノードにアタッチしたスクリプトから、別のノードの内容を呼び出したい、というのはよくあることと思います。

Unityでは例えばGameObject.Findによって実現できますが、Godot Engineで相当する関数はすぐには見つかりませんでした。

最終的に、この辺りの情報をもとにして組み立てました。

forum.godotengine.org

例を挙げて説明します。以下のように、Worldというルートノードがあり、その中の子ノードとしてCoin000があるとします。

An example of node configuration on Godot Engine4.2

SophiaSkinというノードにアタッチしたスクリプトの中で、Coin000の情報を取得します。

そのとき、SophiaSkinのスクリプトでこのように書くと、Coin000の情報を取得できます。

var WorldNode = get_tree().get_root().get_child(0)  #Worldノードを取得する
var Coin000 = WorldNode.get_node("Coin000")      # Worldノードの中にあるCoin000を取得する

2. シーン実行しても灰色で何も表示されない

こちらの動画を参考にして、キャラクターを追加する手順を再現していたのですが、なぜかシーン実行しても真っ暗でした。

www.youtube.com

ただし、これは完全に私の見落としでして、Camera3Dをつけるのを忘れていただけです。動画の4:03付近で「カメラをつけないと見えないから」と説明されています。

同じ悩みの投稿がフォーラムにあり、こちらで解決できました。

forum.godotengine.org

3. おわりに

色々調べてみると、2Dゲームを作る方法はある程度情報が出るのですが、3Dゲームを作るための情報があまり見つけられませんでした。

ひとまず、3Dキャラクターを表示させて移動、特定の対象物と衝突したら消すという処理まで作ってみました。
An example of character locomotion on Godot Engine4.2

次回はこの辺の実現方法をもう少し詳しく書きたいと思います。