Unity Editor 知识点整理(DrawGizmo的两种方法)

方法一

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GizmoExample : MonoBehaviour
{
    
    
    private void OnDrawGizmos()
    {
    
    
    	//记录默认的值
        var color = Gizmos.color;
        Gizmos.color = Color.white;
       
        Gizmos.DrawCube(transform.position,Vector3.one);
        //执行完毕后,还原会默认值 因为Gizmo是静态的,以防其他使用Gizmo时被影响
        Gizmos.color = color;
    }

    private void OnDrawGizmosSelected()
    {
    
    
        var color = Gizmos.color;
        Gizmos.color = Color.red;
        Gizmos.DrawWireCube(transform.position, Vector3.one);
        Gizmos.color = color;
    }
}

方法二
适用于无法获得目标脚本源码,无法添加回调函数时
新建一个Target Example脚本,挂载在对象上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class DrawGizmoExample 
{
    
    
    [DrawGizmo(GizmoType.NotInSelectionHierarchy |
                GizmoType.InSelectionHierarchy |
                GizmoType.Active |
                GizmoType.Selected |
                GizmoType.Pickable)]  
    //参数:(目标物体,上方定义的类型)
    private static void MyCustonOnDrawGizmos(TargetExample target,GizmoType gizmotype)
    {
    
    
        var color = Gizmos.color;
        Gizmos.color = Color.white;
        Gizmos.DrawCube(target.transform.position, Vector3.one);
        Gizmos.color = color;
    }

    [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy)]
    //选中高亮
    private static void MyCustomDrawGizmoSelected(TargetExample target, GizmoType gizmotype)
    {
    
    
        var color = Gizmos.color;
        Gizmos.color = Color.blue;
        Gizmos.DrawWireCube(target.transform.position, Vector3.one);
        Gizmos.color = color;
    }

}

おすすめ

転載: blog.csdn.net/qq_43388137/article/details/122209382