ワタクシが今関わっているプロジェクトはunityあるあるでsceneが山のようにあり、それを編集しているときに再生シーンを固定したいという願いがあった。
それを実現してくれたのがKan Kikuchiさんの エディタ上で再生を開始するSceneを固定する【Unity】【エディタ拡張】 だった。
全く大いに感謝したい話で、もう、これで スタートシーンが固定できる ので、めっちゃ便利に使わせてもらっていた…いたのだけど、 面倒が一つあった 。
それは僕が作っているsceneいくつかは、トップから動かすとわりとメニューの奥深くで、面倒くさいので単独起動できるように作ってあるのだ。
つまり通しのテストのために起動シーンは固定しておきたいが、テストの時には設定されているシーンを無視したい。
そして、いちいちnoneにするのはぶっちゃけ面倒くさい。
というわけでテストのときは起動シーンが固定されないように改造してしまえというわけで、以下に改造したコードを載せておきたい。
gitにあればプルリクなど遅らせれてもらうのだが…
settingStartSceneWindow.cs
// SettingStartSceneWindow.cs
// http://kan-kikuchi.hatenablog.com/entry/playModeStartScene
//
// Created by kan.kikuchi on 2017.09.30.
// Modified on 2021.10.20
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
/// <summary>
/// エディタ上で最初に表示するシーンの設定を行うウィンドウ
/// </summary>
public class SettingStartSceneWindow : EditorWindow{
//設定したシーンのパスを保存するKEY
private const string SAVE_KEY = "StartScenePathKey";
static bool IsWork=false; // true=NONEにする;
static SceneAsset currentAsset=null; // 保存されているsceneに等しいasset。
//メニューからウィンドウを表示
[MenuItem("Window/SettingStartSceneWindow")]
public static void Open (){
SettingStartSceneWindow.GetWindow<SettingStartSceneWindow>(typeof(SettingStartSceneWindow));
}
//初期化(ウィンドウを開いた時等に実行)
private void OnEnable() {
//保存されている最初のシーンのパスがあれば、読み込んで設定
string startScenePath = EditorUserSettings.GetConfigValue(SAVE_KEY);
if(!string.IsNullOrEmpty(startScenePath)) {
//パスからシーンを取得、シーンがなければ警告表示
SceneAsset sceneAsset = AssetDatabase.LoadAssetAtPath<SceneAsset>(startScenePath);
if (sceneAsset == null) {
Debug.LogWarning(startScenePath + "がありません!");
} else {
EditorSceneManager.playModeStartScene = sceneAsset;
currentAsset = sceneAsset;
}
}
}
private void OnGUI() {
//更新前のplayModeStartSceneに設定されてるシーンのパスを取得
string beforeScenePath = "";
if(EditorSceneManager.playModeStartScene != null) {
beforeScenePath = AssetDatabase.GetAssetPath(EditorSceneManager.playModeStartScene);
}
//GUIでシーンファイルを取得し、playModeStartSceneに設定する
EditorSceneManager.playModeStartScene = (SceneAsset)EditorGUILayout.ObjectField(new GUIContent("Start Scene"), EditorSceneManager.playModeStartScene, typeof(SceneAsset), false);
IsWork = EditorGUILayout.ToggleLeft("設定をNONEにする", IsWork);
//更新後のplayModeStartSceneに設定されてるシーンのパスを取得
string afterScenePath = "";
if(EditorSceneManager.playModeStartScene != null) {
afterScenePath = AssetDatabase.GetAssetPath(EditorSceneManager.playModeStartScene);
}
//playModeStartSceneが変更されたらパスを保存
if(beforeScenePath != afterScenePath){
EditorUserSettings.SetConfigValue(SAVE_KEY, afterScenePath);
currentAsset = EditorSceneManager.playModeStartScene;
}
if (IsWork==true) {
EditorSceneManager.playModeStartScene=null; // 強制的にnullにする。
} else {
EditorSceneManager.playModeStartScene=currentAsset; // 保存されてるシーンにする。
}
}
}
オリジナルとの使い方の違いだけ書いておく。
下のように 設定をNONEにするチェックボックス が追加されている。
で、これをチェックすると
start sceneをnoneする、すなわち 現在編集中のシーンを再生する という挙動になる。
なお、このチェックボックスは意図的に保存していないので、再生するたびにオフになる。気に入らない人は自分で改造して欲しい。
↧