【Godot】Node3DとMeshInstance3Dで学ぶGodotの3D空間基本概念

作成: 2025-12-08

Godot Engineで3Dゲーム開発を始める際に理解すべきNode3DとMeshInstance3Dの役割と、3D空間の基本概念を解説します。

1. 導入:なぜNode3DとMeshInstance3Dが重要なのか

Godot Engineで3Dゲーム開発を始める際、最初に理解すべき最も重要な概念が Node3DMeshInstance3D です。これらは、3D空間に存在するすべてのオブジェクトの「場所」と「見た目」を定義する、まさに 3Dシーンの構成要素の基盤 と言えます。

2Dゲーム開発では Node2D が中心でしたが、3Dではその役割を Node3D が担います。

2. Godot 3D空間の基本概念

Godotの3D空間は、現実世界と同じように座標系と単位に基づいて構築されています。

3D座標系:右手系と軸の役割

Godot Engineは、多くの3Dソフトウェアで採用されている 右手系 の座標系を使用しています。

役割方向
Y軸高さ(Up/Down)上方向が正
X軸幅(Left/Right)右方向が正
Z軸奥行き(Forward/Backward)画面奥方向が正

特に重要なのは、 Y軸が「高さ」 を表す点です。また、Godotの3D空間における単位は、 1ユニットが1メートル に相当します。

Transform:位置、回転、スケール

3D空間におけるすべてのオブジェクトは、 Transform(変換) と呼ばれるデータによってその状態が定義されます。

  1. 位置 (Translation/Position): 空間のどこにオブジェクトがあるか。
  2. 回転 (Rotation): オブジェクトがどの方向を向いているか。
  3. スケール (Scale): オブジェクトの大きさがどれくらいか。

3. Node3D: 3D空間における「場所」の定義

Node3D は、Godotの3Dノード階層における最も基本的なノードであり、 すべての3Dノードの基底クラス です。その役割は非常にシンプルかつ強力で、 3D空間におけるオブジェクトの「場所」「向き」「大きさ」を定義すること に特化しています。

Node3D自体は、目に見える形状や物理的な挙動を持ちません。しかし、このノードが持つ transform プロパティを通じて、前述の 位置回転スケール の情報を保持しています。

Node3Dの実践的な使い方

Node3Dは、主に以下の目的で利用されます。

  • ルートノード: 3Dシーンのルート(最上位)ノードとして使用されます。
  • グループ化: 複数の3Dノードをまとめて管理するための親ノードとして使用されます。
  • 相対座標の基準: 子ノードは常に親ノードの座標を基準とした 相対座標 で配置されます。

4. MeshInstance3D: 3D空間における「見た目」の定義

MeshInstance3D は、Node3Dを継承したノードであり、 3D空間に視覚的な形状(メッシュ)を描画する ためのノードです。

Node3Dが「どこに」オブジェクトがあるかを決めるのに対し、MeshInstance3Dは「何が」そこにあるか、つまり オブジェクトの「見た目」 を決定します。

Node3DとMeshInstance3Dの役割分担

ノード役割定義するもの
Node3D場所位置、回転、スケール(Transform)
MeshInstance3D見た目形状(Mesh)、質感(Material)

MeshInstance3Dが持つ最も重要なプロパティは mesh です。ここに BoxMesh(立方体)、 SphereMesh(球体)、あるいは外部からインポートした複雑なモデルなどの Meshリソース を割り当てることで、初めてオブジェクトが画面に描画されます。

5. 実践例: スクリプトでシンプルな3Dオブジェクトを生成・操作する

ここでは、GDScriptを使用して Node3D をルートとし、その子として MeshInstance3D を動的に生成し、位置と色を設定する手順を紹介します。

extends Node3D

func _ready():
    # 1. MeshInstance3Dノードを作成
    var mesh_instance = MeshInstance3D.new()
    add_child(mesh_instance)

    # 2. BoxMeshリソースを作成し、MeshInstance3Dに割り当てる
    var box_mesh = BoxMesh.new()
    box_mesh.size = Vector3(1.0, 1.0, 1.0)
    mesh_instance.mesh = box_mesh

    # 3. StandardMaterial3Dを作成し、色を設定
    var material = StandardMaterial3D.new()
    material.albedo_color = Color(0.8, 0.2, 0.2)
    mesh_instance.set_surface_override_material(0, material)

    # 4. 位置を設定
    mesh_instance.position = Vector3(2.0, 0.5, 0.0)

    # 5. 回転を設定(Y軸を中心に45度回転)
    mesh_instance.rotation_degrees = Vector3(0, 45, 0)

このコードは、エディタでノードを追加し、インスペクターでプロパティを設定する操作を、すべてスクリプトで行っていることに相当します。

6. まとめ

本記事では、Godot Engineで3Dゲーム開発を始めるための基礎として、 Node3DMeshInstance3D の役割、そして3D空間の基本概念を解説しました。

概念キーワード役割
3D空間右手系、1ユニット=1mオブジェクトが存在する環境
Node3DTransform、Position場所 を定義する
MeshInstance3DMesh、Material見た目 を定義する

この二つのノードの役割分担を理解すれば、Godotの3Dシーン構築はもう怖くありません。Node3Dで配置を決め、MeshInstance3Dで見た目を整える。このシンプルな原則が、複雑な3Dゲームの世界を構築する第一歩となります。