(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



Unityでファイルをダブルクリックした時の挙動を変えて、エディタ再生中にシーンアセットをクリックしたらそのまま開くようにする【Unity】【エディタ拡張】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 2019.4.17f1


はじめに

Unityでは通常、再生中にシーンファイルをダブルクリックすると

再生を停止してそのシーンを開きます。

f:id:kan_kikuchi:20210118070002g:plain


しかしサンプルのシーンが大量にあるアセットみたいに、

再生を続けたまま他のシーンに移りたい(確認したい)という事はよくあります。

f:id:kan_kikuchi:20210118065948j:plain


ということで今回はUnityでファイルをダブルクリックした時の挙動を変えて

エディタ再生中にシーンアセットをクリックしたらそのまま開くようにする方法の解説記事です。

f:id:kan_kikuchi:20210118072528g:plain


なお、記事中では以下のアセットを使っています。

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というディレクトリに入れれば、

f:id:kan_kikuchi:20210118072933j:plain


エディタ再生中にシーンアセットをクリックしたらそのまま開くようになります。

f:id:kan_kikuchi:20210118072528g:plain