Unity(三十五):Tile Palette添加绘制画笔

效果

在这里插入图片描述

创建、选择画笔

在这里插入图片描述
在这里插入图片描述

脚本

  • Editor
    using UnityEditor;
    using UnityEditor.Tilemaps;
    using UnityEngine;
    
    // [CustomEditor(typeof(GridBrush))] // 在默认画笔上添加脚本
    [CustomEditor(typeof(CustomBrush))] // 在新创建的画笔上添加脚本
    public class CreateCustomBrushEditor : GridBrushEditor
    {
          
          
    	private string _brushName;
    
    	protected override void OnEnable()
    	{
          
          
    		base.OnEnable();
    		_brushName = (target as CustomBrush)?.name;
    	}
    
    	// 重绘Scene视图
    	public override void OnPaintSceneGUI(GridLayout gridLayout, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)
    	{
          
          
    		base.OnPaintSceneGUI(gridLayout, brushTarget, position, tool, executing);
    		string msg = $"{
            
            _brushName}\n{
            
            gridLayout.name}-{
            
            brushTarget.name}\n{
            
            position}";
    		GUIStyle style = new GUIStyle();
    		style.normal.textColor = Color.red;
    		style.fontSize = 20;
    		// Handles 场景视图中的自定义 3D GUI 控件和绘制操作
    		Handles.Label(position.position, msg, style);
    	}
    
    	[MenuItem("Assets/Create/创建自定义画笔", false, 0)]
    	public static void CreateCustomBrushFile()
    	{
          
          
    		// public static string SaveFilePanelInProject (string 保存框标题, string 文件名, string 后缀名, string 保存提示);
    		string path = EditorUtility.SaveFilePanelInProject("保存自定义画笔", "New Brush", "asset", "请选择保存画笔的路径!");
    		if (path != "") AssetDatabase.CreateAsset(ScriptableObject.CreateInstance<CustomBrush>(), path);
    	}
    }
    
  • 画笔
    using UnityEditor.Tilemaps;
    using UnityEngine;
    
    /**
     * CustomGridBrushAttribute  用于将该类定义为网格画笔,以及使其在调色板窗口中可用
     * CustomGridBrushAttribute (bool hideAssetInstances, bool hideDefaultInstance, bool defaultBrush, string defaultName)
     *		--> hideAssetInstances		在该瓦片面板窗口中隐藏该画笔的所有资源实例
     *		--> hideDefaultInstance		在该 Tile Palette 设置后,该摄像机渲染另一个通道(在不透明效果之后,但在图像效果之前)
     *		--> defaultBrush			如果设置为 true,则画笔将替换在调色板窗口中作为默认画笔的 Unity 内置画笔
     *		--> defaultName				此画笔的默认实例的名称
     */
    // 创建自定义画笔 - 拓展画笔
    [CustomGridBrushAttribute(false, true, false, "自定义画笔")]
    public class CustomBrush : GridBrush
    {
          
          
    	public string name; // 画笔名称(可以添加其他参数用于修改画笔绘制的形式)
    
    	/**
    	 * 重写画笔绘制方法
    	 * public void Paint (GridLayout gridLayout, GameObject brushTarget, Vector3Int position);
    	 *		--> gridLayout			用于布局的 Grid
    	 *		--> brushTarget			绘制操作的目标。默认为当前选择的 GameObject
    	 *		--> position			要绘制数据的单元格的坐标
    	 */
    	public override void Paint(GridLayout gridLayout, GameObject brushTarget, Vector3Int position)
    	{
          
          
    		base.Paint(gridLayout, brushTarget, position);
    		#if false
    		// 修改绘制形式
    		// position.x += 2;
    		// base.Paint(gridLayout, brushTarget, position);
    		#endif
    		// 打印绘制区域的信息
    		Debug.Log($"{
            
            gridLayout.name}-{
            
            brushTarget.name} ---> {
            
            position}");
    	}
    }
    

猜你喜欢

转载自blog.csdn.net/weixin_43526371/article/details/123126894