この記事でのバージョン
Unity 2019.4.17f1
はじめに
Unityでは通常、再生中にシーンファイルをダブルクリックすると
再生を停止してそのシーンを開きます。
しかしサンプルのシーンが大量にあるアセットみたいに、
再生を続けたまま他のシーンに移りたい(確認したい)という事はよくあります。
ということで今回はUnityでファイルをダブルクリックした時の挙動を変えて、
エディタ再生中にシーンアセットをクリックしたらそのまま開くようにする方法の解説記事です。
なお、記事中では以下のアセットを使っています。
Sci-Fi Arsenal | VFX Particles | Unity Asset Store |
OnOpenAsset
Unityでファイルをダブルクリック、正確には開こうとした時の挙動を変更するには
OnOpenAssetという属性を使います。
この属性を任意のメソッドに追加するだけで、
何らかのアセットを開いた時にそのメソッドが実行されるようになります。
/// <summary> /// 何らかのアセットを開いた時に実行される /// </summary> [OnOpenAsset(0)]//OnOpenAssetを追加する事で自動で実行されるようになる。なお、0は優先順位(低い方が先に実行) public static bool OnOpen(int instanceID, int line) { //falseを返すとそのまま開く、trueだと開かない return false; }
実際にこの属性を使ってみると以下のような感じに。
using UnityEngine; using UnityEngine.SceneManagement;//LoadSceneParametersを使うのに必要 using UnityEditor; using UnityEditor.Callbacks;//OnOpenAssetを使うのに必要 using UnityEditor.SceneManagement;//EditorSceneManagerを使うのに必要 /// <summary> /// 特定のアセットを開く時の処理を追加するクラス /// </summary> public static class OpenAssetHandler { /// <summary> /// 何らかのアセットを開いた時に実行される /// </summary> [OnOpenAsset(0)] public static bool OnOpen(int instanceID, int line) { //開いたアセットを取得 var asset = EditorUtility.InstanceIDToObject(instanceID); //エディタ再生中にシーンファイルを開いたら、実行したまま開くように if (Application.isPlaying && asset is SceneAsset) { EditorSceneManager.LoadSceneInPlayMode(AssetDatabase.GetAssetPath(asset), new LoadSceneParameters(LoadSceneMode.Single)); return true; } //それ以外はそのまま開く return false; } }
これをEditorというディレクトリに入れれば、
エディタ再生中にシーンアセットをクリックしたらそのまま開くようになります。