複数のシーンをコードでシンプルに同居させる方法
Unityでは、シーンウィンドウに複数のシーンをあわせることができます。
シーン間は影響し合いますので、チーム開発などで、それぞれのシーンを作成し、あわせることで1つのプロジェクトとすることもできます。
実行していない状態での方法
設計時に複数のシーンをドラッグすることで実現
キャプチャ
コードで差し替え
スクリプトでの差し替えもできます。
メインとなるシーンを置いておいて、サブのシーンを切り替えることでシーンのコントロールも可能です。
次のキャプチャを参考にプロジェクトを作ってみましょう
キャプチャ
コード
実行時の操作方法は考えてみましょう
using UnityEngine;
public class SceneSelecter : MonoBehaviour
{
SceneLoader sceneLoader;
[SerializeField]
string gameScene;
void Start()
{
sceneLoader = GetComponent<SceneLoader>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.L))
{
sceneLoader.Load(gameScene);
}
else if (Input.GetKeyDown(KeyCode.U))
{
sceneLoader.UnLoad(gameScene);
}
}
}
理解のため、単機能に絞ったコードになります。また、エラー処理も最小限にしています。通常に使う分にはこれでもOKです。
複数のシーンを様々な方法で切り替える場合は、変更作業が必要になります。
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
// ロード済み?
bool isLoaded = false;
public void UnLoad(string sc)
{
if (!isLoaded) return;
// 非同期でアンロード。完了したらメソッドを呼び出す(コールバックという)
SceneManager.UnloadSceneAsync(sc).completed += OnUnLoadComplate;
}
// シーンのアンロードが終了した時
void OnUnLoadComplate(AsyncOperation obj)
{
isLoaded = false;
Debug.Log("アンロードが完了しました");
}
public void Load(string sc)
{
if (isLoaded) return;
// 非同期でロード。完了したらメソッドを呼び出す(コールバックという)
SceneManager.LoadSceneAsync(sc, LoadSceneMode.Additive).completed += OnLoadComplate;
}
// シーンのロードが終了した時
void OnLoadComplate(AsyncOperation obj)
{
isLoaded = true;
Debug.Log("ロードが完了しました");
}
}
ディスカッション
コメント一覧
まだ、コメントがありません