コガネブログ

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

【Unity】エディタでシーンを開いた時に Tilemap のすべてタイルを自動でリフレッシュするエディタ拡張

概要

using System.Linq;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
using UnityEngine.Tilemaps;

[InitializeOnLoad]
public static class AllTilesRefresher
{
    static AllTilesRefresher()
    {
        EditorSceneManager.sceneOpened += OnOpen;
    }

    private static void OnOpen( Scene scene, OpenSceneMode mode )
    {
        var list = scene
                .GetRootGameObjects()
                .Select( c => c.GetComponentsInChildren<Tilemap>( true ) )
                .SelectMany( c => c )
            ;
        
        foreach ( var tilemap in list )
        {
            Undo.RecordObject( tilemap, "Refresh All Tiles" );
            tilemap.RefreshAllTiles();
            EditorUtility.SetDirty( tilemap );
        }
    }
}

上記のスクリプトを Unity プロジェクトの Editor フォルダに追加すると
エディタでシーンを開いた時に Tilemap のすべてタイルを
自動でリフレッシュできるようになります

パレットに指定しているスプライトを変更した後などに役立ちます