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. サンプルコード
以下は、Scene
とSceneManager
クラスを使ったシンプルなシーン操作の例です。
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のシーン管理に関する基本的な機能を紹介しました。シーン管理はゲーム開発において非常に重要な要素であり、複雑なゲームにおいては複数のシーンを同時に管理することが一般的です。次のステップとして、シーン間でのデータのやり取りや、シーンのパフォーマンス最適化について学習を進めてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません