(:3[kanのメモ帳]

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

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

現在再生しているシーンがビルドに設定されているか【Unity】【エディタ拡張】


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



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


はじめに

今回はタイトル通り現在再生しているシーンがビルドに設定されているかを判定する方法です!

f:id:kan_kikuchi:20220214073044j:plain


「実際にリリースする時に使うシーンだけで処理を行いたい(行いたくない)」

みたいな時に役立つ感じです。


現在再生しているシーンがビルドに設定されているか

さっそくですが現在再生しているシーンはSceneManager.GetActiveSceneで取得出来ます。

//SceneManagerを使うのに必要
using UnityEngine.SceneManagement;
//現在再生しているシーン名を表示
Debug.Log($"現在のシーン : {SceneManager.GetActiveScene().name}");   
f:id:kan_kikuchi:20220214071517p:plain

次にビルドに設定されているシーンはEditorBuildSettings.scenesで取得出来ます。

ただし、シーンのパスしか直接取得出来ないのでシーン名は

Path.GetFileNameWithoutExtensionを使ってパスから取り出します。

//Pathを使うのに必要
using System.IO;

//EditorBuildSettingsを使うのに必要、エディタ上でしか使えないのでUNITY_EDITORで括る
#if UNITY_EDITOR
using UnityEditor;
#endif
//ビルドに設定されているすべてのシーン名を表示
#if UNITY_EDITOR
foreach (var scene in EditorBuildSettings.scenes) {
  Debug.Log($"ビルドに設定されているシーン : {Path.GetFileNameWithoutExtension(scene.path)}");
}
#endif
f:id:kan_kikuchi:20220214072753p:plain


これらを合わせる事で現在再生しているシーンがビルドに設定されているかを判定出来ます。

#if UNITY_EDITOR
//現在再生しているシーン名を取得
var currentSceneName = SceneManager.GetActiveScene().name;
     
//ビルドに設定されているかで処理を分ける
if (EditorBuildSettings.scenes.Any(scene => Path.GetFileNameWithoutExtension(scene.path) == currentSceneName )) {
  Debug.Log($"現在のシーン{currentSceneName}はビルドに設定されています");
}
else {
  Debug.Log($"現在のシーン{currentSceneName}はビルドに設定されていません");
}
#endif
f:id:kan_kikuchi:20220214073044j:plain