ソースコード
using System; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEngine; public static class GridPaintingStateUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Public; private static readonly Assembly m_assembly = typeof( AssetDatabase ).Assembly; private static readonly Type m_type = m_assembly.GetType( "UnityEditor.GridPaintingState" ); private static readonly PropertyInfo m_info = m_type.GetProperty( "gridBrush", BINDING_ATTR ); public static GridBrushBase gridBrush { get => m_info.GetValue( null ) as GridBrushBase; set => m_info.SetValue( null, value ); } } public static class GridPaletteBrushesUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Public; private static readonly Assembly m_assembly = typeof( AssetDatabase ).Assembly; private static readonly Type m_type = m_assembly.GetType( "UnityEditor.GridPaletteBrushes" ); private static readonly PropertyInfo m_property = m_type.GetProperty( "brushes", BINDING_ATTR ); public static List<GridBrushBase> brushes => m_property.GetValue( null ) as List<GridBrushBase>; }
使い方
using UnityEditor; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // 設定したいブラシを名前で検索する var brush = GridPaletteBrushesUtils.brushes.Find( c => c.name.Contains( "Line Brush" ) ); GridPaintingStateUtils.gridBrush = brush; } }
これで Tile Palette で選択されているブラシをスクリプトから変更できます