【Unity】【エディタ拡張】シーン作成時に自動でGIの有効化/無効化する

シーンのGI設定を自動化する方法です。

Unity2018.2.17

課題

LightingWindowのGIの設定は意識する機会が少ないものの、
うっかり間違えているとパフォーマンスに大きな影響を及ぼします。
間違いを防ぐために、Scene作成時に自動で設定を行うスクリプトを作りました。

下記の記事でもやり方が紹介されていますが、
本記事ではAssetPostProcessorを使って実装してみました。

techblog.kayac.com

ソースコード

それではソースコードです。

public class ScenePostProcessor : AssetPostprocessor {

    private void OnPreprocessAsset()
    {
        if (assetPath.EndsWith(".unity")) {
            var guid = AssetDatabase.AssetPathToGUID(assetPath);
            var asset = AssetDatabase.LoadAssetAtPath<Object>(assetPath);

            // Assetがまだ生成されていなかったら新規作成とみなす
            if (!string.IsNullOrEmpty(guid) && asset == null) {

                // ここで処理すると不具合が生じるのでディレイさせる
                EditorApplication.delayCall = () => 
                {
                    var previousPath = EditorSceneManager.GetActiveScene().path;
                
                    // シーンを開く
                    var scene = EditorSceneManager.OpenScene(assetPath, OpenSceneMode.Single);
                    // GIの設定
                    Lightmapping.bakedGI = false;
                    Lightmapping.realtimeGI = false;
                    // シーンを保存
                    EditorSceneManager.MarkSceneDirty(scene);
                    EditorSceneManager.SaveOpenScenes();
                
                    // 元のシーンを開く
                    if (!string.IsNullOrEmpty(previousPath)) {
                        EditorSceneManager.OpenScene(previousPath, OpenSceneMode.Single);
                    }
                };
            }
        }
    }   
}

説明はコメントを参照してください。
今回の実装ではScene作成時に自動的にGIがOFFになります。

関連

light11.hatenadiary.com

light11.hatenadiary.com

参考サイト

techblog.kayac.com