Unityのシーン管理に関する技術資料

Unityにおけるシーン管理は、ゲームの進行やステージ間の遷移をスムーズに行うための重要な要素です。本資料では、UnityのSceneクラスおよびSceneManagerクラスについて、その基本的な機能と使用方法を解説します。


1. Scene クラスの概要

Scene クラスは、Unityにおけるゲームのシーンを扱うためのクラスです。シーンとは、ゲーム内のオブジェクトや環境のセットを指します。このクラスを使って、シーンの名前や状態、ルートオブジェクトを管理します。

1.1 主なプロパティ

プロパティ名説明
nameシーンの名前を取得します。
pathシーンのファイルパスを取得します。
isLoadedシーンがロードされているかを確認します。
buildIndexビルド設定におけるシーンのインデックスを取得します。
rootCountシーン内のルートオブジェクト数を取得します。

1.2 主なメソッド

メソッド名説明
GetRootGameObjects()シーン内のルートオブジェクトを配列として取得します。
IsValid()シーンが有効かどうかを確認します。

1.3 シーンの操作方法

SceneManagerクラスを使用してシーンをロード、アンロード、切り替えなどの操作を行います。

シーンのロード

シーンをロードするには、SceneManager.LoadScene() メソッドを使用します。

SceneManager.LoadScene("SampleScene");

現在のシーンを取得

現在アクティブなシーンを取得するには、SceneManager.GetActiveScene() メソッドを使用します。

Scene currentScene = SceneManager.GetActiveScene();
Debug.Log("Current scene name: " + currentScene.name);

シーンのアンロード

シーンをアンロードするには、SceneManager.UnloadSceneAsync() メソッドを使用します。

SceneManager.UnloadSceneAsync("SampleScene");

2. SceneManager クラスの概要

SceneManager クラスは、Unityでシーンのロード、アンロード、アクティブシーンの切り替えなどを管理するクラスです。Sceneクラスと連携して、動的にシーンを操作できます。

2.1 主なメソッド

1. LoadScene()

指定したシーンをロードします。シーンの名前またはビルドインデックスを使って指定できます。

SceneManager.LoadScene("SceneName");

2. LoadSceneAsync()

シーンを非同期でロードします。ゲームを一時停止せずにバックグラウンドでシーンをロードできます。

SceneManager.LoadSceneAsync("SceneName");

3. UnloadSceneAsync()

シーンをアンロード(解除)します。非同期でアンロードできるため、ゲームのパフォーマンスに優れています。

SceneManager.UnloadSceneAsync("SceneName");

4. GetActiveScene()

現在アクティブなシーン(プレイヤーが操作しているシーン)を取得します。

Scene activeScene = SceneManager.GetActiveScene();
Debug.Log("Active scene: " + activeScene.name);

5. SetActiveScene()

別のシーンをアクティブシーンとして設定します。

SceneManager.SetActiveScene(loadedScene);

6. sceneCount

現在ロードされているシーンの数を取得します。

int sceneCount = SceneManager.sceneCount;
Debug.Log("Number of loaded scenes: " + sceneCount);

7. GetSceneByName()

名前でシーンを取得します。

Scene scene = SceneManager.GetSceneByName("SceneName");
Debug.Log("Loaded scene name: " + scene.name);

3. シーンのロードモード

シーンをロードする際には、LoadSceneModeを使用して、シーンを単独でロードするか、既存のシーンに追加するかを指定できます。

モード説明
LoadSceneMode.Single現在のシーンをアンロードして新しいシーンをロードします。(デフォルト)
LoadSceneMode.Additive現在のシーンに新しいシーンを追加します。

Additiveモードでのシーンロード例

SceneManager.LoadScene("SceneName", LoadSceneMode.Additive);

4. サンプルコード

以下は、SceneSceneManagerクラスを使ったシンプルなシーン操作の例です。

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneManagerExample : MonoBehaviour
{
    void Start()
    {
        // シーンを非同期でロード
        SceneManager.LoadSceneAsync("SampleScene");

        // 現在のアクティブシーンを取得
        Scene activeScene = SceneManager.GetActiveScene();
        Debug.Log("Active scene: " + activeScene.name);

        // シーンをアンロード
        SceneManager.UnloadSceneAsync("OldScene");
    }
}

この資料では、Unityのシーン管理に関する基本的な機能を紹介しました。シーン管理はゲーム開発において非常に重要な要素であり、複雑なゲームにおいては複数のシーンを同時に管理することが一般的です。次のステップとして、シーン間でのデータのやり取りや、シーンのパフォーマンス最適化について学習を進めてみてください。

Unity

Posted by hidepon