コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】シーンを保存した時に .lighting ファイルが勝手に保存される時の対策

概要

シーンを保存した時に .lighting ファイルが勝手に保存される時の対策として
以下のエディタ拡張を作成した

すべてのシーンの Lighting Settings Asset を無効化するエディタ拡張

using System.Linq;
using UnityEditor;
using UnityEditor.SceneManagement;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        var paths = AssetDatabase
                .GetAllAssetPaths()
                .Where( x => x.EndsWith( ".unity" ) )
                .ToArray()
            ;

        var setups = EditorSceneManager.GetSceneManagerSetup();

        foreach ( var path in paths )
        {
            var scene = EditorSceneManager.OpenScene( path );

            if ( Lightmapping.lightingSettings == null ) continue;

            Lightmapping.lightingSettings = null;
            EditorSceneManager.SaveScene( scene );
        }

        EditorSceneManager.RestoreSceneManagerSetup( setups );
    }
}

開いたシーンの Lighting Settings Asset を無効化するエディタ拡張

using System;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;

[InitializeOnLoad]
public static class LightingSettingsDisabler
{
    static LightingSettingsDisabler()
    {
        EditorSceneManager.sceneOpened += ( _, _ ) =>
        {
            try
            {
                if ( Lightmapping.lightingSettings == null ) return;

                Lightmapping.lightingSettings = null;
                EditorSceneManager.MarkSceneDirty( SceneManager.GetActiveScene() );
            }
            catch ( Exception )
            {
                // ignored
            }
        };
    }
}