質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2575閲覧

特定シーンをUnLoadしてからデバッグを開始する方法について

buibui80

総合スコア1033

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/02/18 07:42

Unity5.3から利用できるマルチシーンエディティングに関して質問がございます。

マルチシーンエディティングはヒエラルキー上で複数シーンを同時編集できる機能で、
複数シーンが開いた状態で作業を行っております。
(複数シーンをヒエラルキーにドラッグ&ドロップすることで同時編集ができます)

作業中にデバッグ再生して動作確認するのですが、
作業状態のままだと複数シーンが全てロードされた状態のまま再生が行われる為、
複数シーンが同時に動いてしまいます。

現在は再生前に特定シーンを個別にUnLoadしているのですが、
毎度のことで面倒な思いをしています。
(ヒエラルキー上のシーン名横のメニューからUnLoadを実行)

そこで質問ですが、
特定シーンをUnLoadしてからデバッグを開始する方法はないでしょうか?

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エディタを拡張することで、望まれてる処理ができるかもしれません。

以下のリンクにシーン構成保存・復元エディタスクリプトがあるのですが、それを改良してエディター再生時・停止時に特定のシーンだけを再生し、停止時にシーン構成を復元するエディタスクリプトを作ってみました。
[Unity][マルチシーン]シーン構成保存・復元エディタスクリプト

以下のスクリプトでは一番上のシーンだけを残し、シーンが起動するようにしていますがそこを改良していただければ、ご希望のものになるかもしれません。

using UnityEngine; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; using System.Collections.Generic; using System.Linq; public class SceneSetupData : ScriptableObject { [SerializeField] private SceneSetupCache[] m_cache = null; private const string ASSET_PATH = "Assets/SceneSetupData.asset"; private static void Save( SceneSetup[] i_setupList ) { var obj = ScriptableObject.CreateInstance<SceneSetupData>(); obj.m_cache = i_setupList.Select( value => new SceneSetupCache( value ) ).ToArray(); AssetDatabase.CreateAsset( obj, ASSET_PATH ); } private static SceneSetup[] Load() { var asset = AssetDatabase.LoadAssetAtPath<SceneSetupData>( ASSET_PATH ); if( asset == null ) { return null; } return asset.m_cache.Select( value => value.Data ).ToArray(); } private static void Delete() { AssetDatabase.DeleteAsset( ASSET_PATH ); } [InitializeOnLoadMethod] private static void CheckPlaymodeState() { EditorApplication.playmodeStateChanged += () => { // エディタが停止状態になった際に、シーンのキャッシュデータがある場合はシーンを読み込み直す if( !EditorApplication.isPlaying ) { var setupList = Load(); if( setupList != null ) { EditorSceneManager.RestoreSceneManagerSetup( setupList ); Delete(); } } // エディタがプレイ開始状態になる直前にシーンのキャッシュデータを残し、指定したシーン以外を閉じる if( EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isPlaying ) { var setupList = EditorSceneManager.GetSceneManagerSetup(); Save( setupList ); // 仮で一番最初のシーン以外は閉じる処理を行っています。 var unloadScenes = new List<Scene>(); for( int i = 1; i < EditorSceneManager.sceneCount; ++i ) { var scene = EditorSceneManager.GetSceneAt( i ); unloadScenes.Add( scene ); } foreach( var scene in unloadScenes ) { EditorSceneManager.CloseScene( scene, false ); } } }; } /// <summary> /// シーンのキャッシュ情報 /// </summary> [System.Serializable] private struct SceneSetupCache { public SceneSetupCache( SceneSetup i_setup ) { isActive = i_setup.isActive; isLoaded = i_setup.isLoaded; path = i_setup.path; } public SceneSetup Data { get { var setup = new SceneSetup(); setup.isActive = isActive; setup.isLoaded = isLoaded; setup.path = path; return setup; } } [SerializeField] private bool isActive; [SerializeField] private bool isLoaded; [SerializeField] private string path; } } // class SceneSetupData

ご参考になればと思います。

投稿2016/06/10 06:39

urahimono

総合スコア714

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

buibui80

2016/06/19 01:52

ご返答ありがとうございます。 確認が遅れ申し訳ございません。 EditorSceneManager.CloseSceneに渡すシーンを変更することで 期待する動作が実現できました。 エディタ拡張は便利ですね、今後勉強してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問