unity editor 编辑器插件制作基础:五、物体在Scene窗口中编辑状态下的辅助显示,以及控制功能扩展OnDrawGizmos GizmoType

一 说明

该功能只能在编辑状态下运行,并只能在scene窗口中显示。
脚本必须继承MonoBehaviour ,并且引入UnityEngine和UnityEditor库
可以选择相关方法,在鼠标选择父物体或子物体的范围内执行,也可以设置被选择,或不被选择才执行,可以用于显示标签、辅助线等用途

大量可直接调用的scene组件都可在这里找到 https://docs.unity3d.com/ScriptReference/Handles.html

1.1 引用库

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

1.2 脚本结构

需要在指定周期或是指定标签注明的方法中绘制才会在scene状态下显示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor; // 需引用该库
public class MapCreator : MonoBehaviour // 普通脚本,并非edtor
{
		// 普通方法运行 可以直接使用类属性
		//编辑器状态下每帧调用
        void OnDrawGizmos() {}
		// 编辑器状态下 物体被选中的时每帧调用
        void OnDrawGizmosSelected() {}

		//静态方法 需要使用静态类属性
		// 当物体active状态为可见时每帧调用
        [DrawGizmo(GizmoType.Active)]
        static void f1(Transform transform, GizmoType gizmoType) {
        }
        // 当物体或其子物体被选中时每帧调用
        [DrawGizmo(GizmoType.InSelectionHierarchy)]
        static void f2(Transform transform, GizmoType gizmoType) {
        }
        // 当前物体没被选中时每帧调用
        [DrawGizmo(GizmoType.NonSelected)]
        static void f3(Transform transform, GizmoType gizmoType) {
        }
        // 当物体或其子物体都没被选中时每帧调用
        [DrawGizmo(GizmoType.NotInSelectionHierarchy)]
        static void f4(Transform transform, GizmoType gizmoType) {
        }
        //允许gizmo在编辑器中被选中
        [DrawGizmo(GizmoType.Pickable)]
        static void f5(Transform transform, GizmoType gizmoType) {
        }
        // 当前物体被选中时每帧调用
        [DrawGizmo(GizmoType.Selected)]
        static void f6(Transform transform, GizmoType gizmoType) {
        }
}

二 实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor; // 需引用该库
public class MapCreator : MonoBehaviour // 普通脚本,并非edtor
{
	  public MapBlockType currentMapBlockType = MapBlockType.Ground;

      //绘制图形
      void OnDrawGizmos() {
            //绘制cube边框
            Gizmos.color = Color.black;
            //当前物体必须有Renderer组件 用于绘制
            Gizmos.DrawWireCube(GetComponent<Renderer>().bounds.center, GetComponent<Renderer>().bounds.size);
            //在物体上方绘制一条直线
            Gizmos.color = Color.green;
            Gizmos.DrawLine(transform.position, transform.position + transform.up * 3);
       }
        
       // 绘制图形
       void OnDrawGizmosSelected() {
            Gizmos.color = Color.red;
            Gizmos.DrawWireCube(GetComponent<Renderer>().bounds.center, GetComponent<Renderer>().bounds.size);
        }
        // 绘制标签
        [DrawGizmo(GizmoType.NonSelected)]
        static void DrawGameObjectName(Transform transform, GizmoType gizmoType) {
            Handles.Label(transform.position, transform.gameObject.name);
        }
        // 绘制标签
        [DrawGizmo(GizmoType.Selected | GizmoType.Active)]
        static void DrawGameObjectName1(Transform transform, GizmoType gizmoType) {
            Handles.Label(transform.position, transform.gameObject.name);
        }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千年奇葩

从来没受过打赏,这玩意好吃吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值