この記事でのバージョン
Unity 2018.4.1f1
はじめに
今回は「このシーンで再生ボタンを押したら、違うシーンを再生してほしい!」
みたいなちょっとトリッキーな話。
以前に、どのシーンからでも再生を開始するシーンを固定するという記事は書きましたが、
これの特定のシーンVerといった具合で、イメージとしては以下のような感じ。
![]() |
ちなみに、「再生出来ないようにしたい」という場合は以下の記事を参照のこと。
![]() |
なお、記事中の画像は以下のアセットを使っております。
![]() |
2D Samurai Soccer Pack Vol 1 | 2D Characters | Unity Asset Store |
ScenePlayBlocker
早速ですが、別のシーンから再生するようにするクラスAnotherScenePlayerのプログラムです。
using UnityEngine; #if UNITY_EDITOR using UnityEditor; using UnityEditor.SceneManagement; #endif /// <summary> /// 別のシーンから再生するようにする /// </summary> [ExecuteInEditMode]//ExecuteInEditModeを付ける事でOnValidateやOnDestroyが再生していなくても実行されるようになる public class AnotherScenePlayer : MonoBehaviour{ #if UNITY_EDITOR //再生する別のシーン(nullのままにすると、現状のシーンがそのまま再生される) [SerializeField] private SceneAsset _anotherScene = null; //================================================================================= //初期化、破棄 //================================================================================= //有効になった時(シーンを開いた時)や、Inspectorで変数(_anotherScene)を変更した時に実行 private void OnValidate() { //最初に再生するシーンを登録 EditorSceneManager.playModeStartScene = _anotherScene; } //削除された時(シーンを閉じた時)に実行 private void OnDestroy() { //最初に再生するシーンを削除(他のシーンを再生した時に再生シーンが変わらないように) EditorSceneManager.playModeStartScene = null; } #endif }
これをシーン内のオブジェクトにAddし、Another Sceneシーンを登録すると、
![]() |
そのシーンから再生が開始されるようになります。(他のシーンに影響はない)
![]() |
一応、プログラムについて解説をしてみると、以下のような感じでかなり単純です。
- ExecuteInEditModeの属性を付けて、OnValidateとOnDestroyを再生してない時にも実行されるように
- EditorSceneManager.playModeStartSceneで最初に再生するシーンを指定
ちなみにEditorApplication.playModeStateChangedや
EditorSceneManager.playModeStartSceneについては以下の記事を参照のこと。
なお、シーンをパスで指定してロードしたい場合は、AssetDatabase.LoadAssetAtPathを使います。
//最初に再生するシーンを登録 EditorSceneManager.playModeStartScene = AssetDatabase.LoadAssetAtPath<SceneAsset>("Assets/Scenes/Scene3.unity");
![]() |