unity笔记-unity扩展编辑器-Scene视图自定义菜单

Scene视图自定义菜单

效果:
在Scene窗口右键,在鼠标位置生成菜单,如下:
在这里插入图片描述
点击菜单Test1
在这里插入图片描述

点击菜单XFKT/Test2
在这里插入图片描述
代码:

//放到Editer文件夹中
using UnityEditor;
using UnityEngine;

public class SceneMenu : MonoBehaviour
{
    [InitializeOnLoadMethod]
    static void InitializeOnLoad()
    {
        SceneView.duringSceneGui += (sceneView) =>
        {
            if (Event.current != null && Event.current.button == 1 && Event.current.type == EventType.MouseUp)
            {
                Rect position = new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y - 100, 100, 100);
                GUIContent[] contents = new GUIContent[] { new GUIContent("Test1"), new GUIContent("XFKT/Test2") };


                EditorUtility.DisplayCustomMenu(position, contents, -1, (data, opt, select) =>
                {
                    Debug.LogFormat("data:{0},opt:{1},select:{2},value:{3}", data, opt, select, opt[select]);
                }, null);

				//因为需要点击右键,呼出菜单
				//点击右键,此时Scene窗口会进入游览状态
				//为了保持变换工具不变。
				//例如,右键前后都是 变换工具-移动物体
                Event.current.Use();
            }
        };
    }
}

Scene窗口的Gizmos

打开Scene窗口的Gizmos按钮。(可能是默认开启)

物体被选中时,画线、球

效果:
在这里插入图片描述

代码:
不需要放到Editer文件夹中,建议放到Scripts文件夹中。
需要挂载到物体。

using UnityEngine;

public class SceneGizmos : MonoBehaviour
{
    public Color color;//如果不显示,则调整RGBA中的A
    private void OnDrawGizmosSelected()
    {
        Gizmos.color = color;
        Gizmos.DrawLine(transform.position, transform.position + Vector3.up * 2);
        Gizmos.DrawSphere(transform.position, 1);
    }
}

一直显示,线、球、图标

效果:
在这里插入图片描述

代码:

using UnityEngine;

public class SceneGizmos : MonoBehaviour
{
    private void OnDrawGizmos()//一直显示
    {
        Gizmos.DrawLine(transform.position, transform.position + Vector3.up * 2);
        Gizmos.DrawSphere(transform.position, 1);
        Gizmos.DrawIcon(transform.position, "Assets/Textures 1/Btn.png");
    }
}

在Scene窗口中添加UI

物体被选中时,添加按钮、标签

效果:
在这里插入图片描述
代码:

using UnityEditor;
using UnityEngine;

//选中的物体上有SceneGizmos组件,才执行。其他组件也可以
[CustomEditor(typeof(SceneGizmos))]
public class SceneGUI : Editor
{
    private void OnSceneGUI()
    {
        Handles.BeginGUI();

        //绘制按钮
        //按钮默认位置在左上角
        if (GUILayout.Button("test1", GUILayout.Width(100)))//如果点击按钮
        {
            Debug.Log(target.name);
        }
        //绘制标签
        GUILayout.Label(target.name);

        Handles.EndGUI();
    }
}

一直显示,按钮、标签

效果:
在这里插入图片描述
代码:

using UnityEditor;
using UnityEngine;

public class SceneGUI : Editor
{
    [InitializeOnLoadMethod]
    static void InitializeOnLoad()
    {
        SceneView.duringSceneGui += (sceneView) =>
        {
            Handles.BeginGUI();

            if (GUILayout.Button("test2", GUILayout.Width(100)))
            {
                Debug.Log("test2");
            }

            GUILayout.Label("弦风课堂");

            Handles.EndGUI();
        };
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值