表示テーマ
Scene・Prefab・親子関係
SceneとGameObject
SceneはGameObjectとComponentの保存単位です。Hierarchyで開いているSceneと、作成先のActive Sceneを確認します。AssetとしてのSceneと、実際に読み込んだScene Instanceは区別してください。同じScene Assetを複数読み込むこともできます。
GameObjectを選ぶとInspectorにComponentが表示されます。通常のGameObjectにはTransformがあり、描画・物理・ScriptなどのComponentを組み合わせて機能を作ります。
親子付けと座標
| 値 | 基準 |
|---|---|
| Transform.position | ワールド位置 |
| Transform.localPosition | 親を基準とした位置 |
| Transform.rotation | 親を含むワールド回転 |
| Transform.localRotation | 親に対する回転 |
| Transform.localScale | 親に対する拡縮倍率 |
Hierarchyのドラッグで親子関係を変更できます。Sceneをまたぐ親子変更はできません。配置を保って親を変える場合、C#ではSetParent(parent, true)を使用します。非均等Scaleを持つ階層では、回転と拡縮の結果を実際の表示で確認してください。
保存・複製
Sceneを保存すると編集用Worldの値を保存します。Play中の位置や生成物は、Stop後の編集Sceneへ自動反映するものではありません。
階層を複製すると、複製範囲内の参照は複製先へ、範囲外の参照は元の対象へ対応付けます。Asset自体の複製と、Hierarchy上のGameObject複製は別操作です。
Prefabを使う
繰り返し置くGameObjectのまとまりはPrefabとして保存します。ProjectのPrefabから配置し、Prefab編集とScene Instance側の編集を区別します。共通の変更を行う前に、Instance固有の値を残したいかを確認してください。
C#では保存FieldへPrefabを設定し、Instantiateで生成できます。戻り値がnullでないことを確認してから、Componentへアクセスします。
C#でSceneを切り替える
cs
using NEMEngine;
public sealed class SceneSwitcher : MonoBehaviour {
[SerializeField] private SceneAsset? nextScene;
void Update() {
// Enterを押したframeだけ指定Sceneへ切り替える
if (!Input.GetKeyDown(KeyCode.Return) || nextScene == null) return;
SceneManager.LoadScene(nextScene);
}
}保存FieldのnextSceneにはProjectのSceneを設定します。LoadSceneは切替を要求するAPIで、呼んだ直後に新SceneのすべてのScriptが開始済みとは限りません。完了を受ける場合はSceneLoadedを使います。
LoadAdditiveは現在のSceneを残して追加します。返されたHandleを保持し、不要になったInstanceをUnloadで指定します。Asset名だけでInstanceを区別しないでください。
事前ロードと常駐
PreloadSceneはGameObjectを生成せず依存Assetの先読みを要求します。DontDestroyOnLoadはPlay中のルートと子孫をScene切替後も保持します。参照を持ち続ける対象を常駐させる場合は、終了時の破棄とイベント購読の解除も合わせて設計します。