Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9517

特定シーンから強制的に起動するスクリプトを改造する

$
0
0
ワタクシが今関わっているプロジェクトは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する、すなわち 現在編集中のシーンを再生する という挙動になる。 なお、このチェックボックスは意図的に保存していないので、再生するたびにオフになる。気に入らない人は自分で改造して欲しい。

Viewing all articles
Browse latest Browse all 9517

Trending Articles