シーンとシーンノード

このページは自動翻訳されており、誤りが含まれる場合があります。誤りを見つけた場合は「このページを編集」リンクからご協力ください。

シーン

シーンはゲーム内の何か — ステージ、メニュー、キャラクター、UI 画面 — を表すノードのツリーです。シーンは Assets/ 内の任意の場所に .prefab ファイルとして保存されます:

Assets/
  scene-01.prefab       ← 新規プロジェクトのスタートシーン
  Levels/
    forest.prefab
  Enemies/
    grunt.prefab

スタートアップシーンはゲーム開始時に最初に読み込まれるシーンです。プロジェクトの Player Settings で設定します。

シーンは Assets パネルで作成します:フォルダーを右クリック → New → Scene。シーンをダブルクリックすると開き、開いたシーンにはそれぞれウィンドウ上部にタブができます。

ノード

ノードはシーンの 1 つの要素です。ノードはツリーを構成します。各ノードには親が 1 つと任意の数の子があり、親を変換すると子も変換されます。

Main Scene
├── Camera
├── Sun
├── Ground
│   ├── Tree        (Ground と一緒に動く)
│   └── Rock
└── Player
    └── Weapon

すべてのノードは Transform — 位置、回転(度単位のオイラー角、内部ではクォータニオン)、スケール — を持ちます。空のノードも、出現位置、回転の中心、他のノードをまとめる親として役立ちます。

Studio でのノード操作

Scene Tree パネルでは:

  • ノードをクリックして選択します。Inspector に Transform とコンポーネントが表示されます。
  • 右クリックで New Node、New Child Node、Rename、Delete、Copy、Paste。
  • F2 で名前変更、Delete で削除、D で選択ノードを複製します。
  • Assets パネルからスクリプトをノードにドラッグすると、そのコンポーネントが追加されます。

Scene ビューでは、ノードを選んで Move (W)、Rotate (E)、Scale (R) ツールを使います。F で選択対象にフレーミングします。ギズモ を参照してください。

Ctrl+S で保存します(開いているすべてのドキュメントを保存するには Ctrl+Shift+S)。

コードでのノード

public override void OnStart()
{
    var node = Node!;                                  // このコンポーネントのノード
    node.Name = "Player";
    node.Transform.Position = new Vector3(0, 1, 0);

    foreach (var child in node.Children)               // 直接の子
        child.IsActive = true;

    var light = node.GetComponent<LightComponent>();   // なければ null
    foreach (var mesh in node.GetComponentsInChildren<ModelComponent>())
        mesh.IsActive = false;
}

実行時に新しいオブジェクトを生成するには、プレハブをインスタンス化します — シーンのインスタンス化 を参照してください。

ディスク上のシーンファイル

.prefab ファイルはノードツリー全体を読みやすく差分を取りやすい JSON で保存します。各オブジェクトには C# の型の安定した id である __TypeId があり、クラス名や名前空間を変えてもシーンは壊れません:

{
  "__TypeId": "a3000000-0000-4000-8000-000000000002",
  "IsActive": true,
  "Name": "Main Scene",
  "Children": [
    {
      "__TypeId": "a3000000-0000-4000-8000-000000000002",
      "IsActive": true,
      "Name": "Camera",
      "Children": [],
      "Components": [
        { "__TypeId": "a3000001-0000-4000-8000-000000000001", "FieldOfViewDegrees": 60, "NearPlane": 0.01, "FarPlane": 100 }
      ],
      "Transform": {
        "Position": { "X": 0, "Y": 2, "Z": -6 },
        "Orientation": { "X": 0, "Y": 0, "Z": 0, "W": 1 },
        "Scale": { "X": 1, "Y": 1, "Z": 1 }
      },
      "Id": "e0224d28-0849-45fc-a09c-ba8645113a9e"
    }
  ],
  "Components": [],
  "Id": "7d1f4c2a-…"
}

シーンファイルを手で編集する必要はほとんどありませんが、この形式なら Git での変更確認やマージの競合解決が簡単です。


← すべてのドキュメント このページを編集