Unity3Dで、  
Build Settingsに変更を加えたことを検出するようなコールバックが存在するのであれば、教えていただけますでしょうか。  
存在しないのであれば、どのように実装するのか教えて頂きたいです。  
宜しくお願い致します。
CC BY-SA 4.0
2019-02-19T09:51:10.230
52875
2020-10-22T23:03:25.390
32241
question
unity3d build
UnityでBuild Settingsに変更を加えたことを検出するコールバック関数はありますか？
現在サポートされているのは、ターゲットプラットフォームを変更したことだけのようです。  
Build Settingsの個々の内容を変更したことの検出・通知は無いようです。

[第13章 さまざまなイベントのコールバック](https://anchan828.github.io/editor-
manual/web/callbacks.html)  
[13.6
EditorUserBuildSettings.activeBuildTargetChanged](https://anchan828.github.io/editor-
manual/web/callbacks.html#h13-6)

> Build Settings ウィンドウや EditorUserBuildSettings.SwitchActiveBuildTarget
> によって、プラットフォームが変更された時に呼び出されるコールバックです。プラットフォームごとに異なる設定、例えば BundleIdentifier
> の変更や、StreamingAssets や Resources フォルダーの中身の変更などで活用できます。

設定するのは、こちらの変数にコールバックを登録する形でしょう。  
[EditorUserBuildSettings.activeBuildTargetChanged](https://docs.unity3d.com/jp/460/ScriptReference/EditorUserBuildSettings-
activeBuildTargetChanged.html)

> public static var activeBuildTargetChanged: Action;
>
> Description  
>  SwitchActiveBuildTargetでプラットフォームが変更された直後に呼び出されるコールバックを設定します
>
> See Also: System.Action.

関連メソッドはこれですね。  
[EditorUserBuildSettings.SwitchActiveBuildTarget](https://docs.unity3d.com/jp/460/ScriptReference/EditorUserBuildSettings.SwitchActiveBuildTarget.html)

> public static function SwitchActiveBuildTarget(target: BuildTarget): bool;
>
> Description  
>  ビルドターゲットを変更します
>
> 注意: このメソッドは バッチモード でエディタを起動している時に使用することは出来ません。

ターゲットプラットフォームを変更以外の細かいことを知りたいのなら、無理やりですが、  
このコールバックを登録するというのも出来るのではないでしょうか。  
[13.13
EditorApplication.globalEventHandler](https://anchan828.github.io/editor-
manual/web/callbacks.html#h13-13)

> Unity
> エディター全体でなんらかのイベントが実行された時に実行されるコールバックです。これは正式には公開されていませんが、なんらかのキーイベントやマウス位置など把握したい時に使用すると便利です  
>  下記コードは、globalEventHandler を使いやすくしたラッパークラスです。  
>  注）図は省略。  
>  図13.9: 適当なところでキーを押すとログが表示されていく  
>  注）コードは省略  
>  ただし、ゲームビューや、ほかの一部のウィンドウ上では動作しないので注意してください。

少し戻って、こんな記述もあるようです。こちらの方が独自コールバック実装に向いていますか。  
[13.11 EditorApplication.update](https://anchan828.github.io/editor-
manual/web/callbacks.html#h13-13)

> Unity エディターの更新タイミングで呼び出されるコールバックです。エディターにも MonoBehaviour の Update
> のような一定の更新タイミングがあります。呼び出されるのは約 200回/秒 となり、描画系処理の前に実行されます。*4  
>  [*4] 200回/秒実行されるのはバグとの報告があります。ドキュメントでは 100回/秒と記載されています。  
>  例えば WWW の通信でも使用できます。  
>  注）コードは省略  
>  このほかにも **独自のコールバックを実装するときにも使用できます。**  
>  下記コードは、フォーカスしている EditorWindow が変更するごとに呼び出されるコールバックを作成します。  
>  **注）コードは省略しますが、これが実装例：紹介先を参照のこと**

上記設定用変数はこれでしょう。  
[EditorApplication.update](https://docs.unity3d.com/jp/460/ScriptReference/EditorApplication-
update.html)

> public static var update: CallbackFunction;
>
> Description  
>  UnityEditorで更新処理を行うためのデリゲート
>
> おおよそ100回/秒のタイミングで呼び出されるコールバックをこのデリゲートに追加します。 See Also:
> EditorApplication.CallbackFunction.
CC BY-SA 4.0
2019-02-19T11:20:01.003
52878
2019-02-19T11:25:59.777
2019-02-19T11:25:59.777
26370
26370
52875
answer
```

    using UnityEditor;
    using UnityEngine;
    
    public class SceneListChangedMonitor : MonoBehaviour
    {
        [InitializeOnLoadMethod]
        static void Initialize()
        {
            Debug.Log("シーンリスト監視開始");
            EditorBuildSettings.sceneListChanged += () =>
            {
                //シーン一覧からシーン名と状態を取得
                foreach(var scene in EditorBuildSettings.scenes)
                {
                    Debug.Log($"Scene = {scene.path} is {scene.enabled}");
                }
            };
        }
    }
    
```

Build Settingsのシーン一覧に変更があったときにコンソールログにシーン一覧が出力されるコードはこのように実装されるそうです。
CC BY-SA 4.0
2019-02-20T04:25:09.030
52891
2019-02-20T04:25:09.030
32241
52875
answer