跟着书学Unity-《Unity3D游戏开发》宣雨松编著-(二)拓展编辑器(拓展Hierarchy视图、拓展Inspector视图、拓展Scene视图、拓展Game视图)(未完)

 书接上回跟着书学Unity-《Unity3D游戏开发》宣雨松编著-(一)Unity的基础知识、编辑器结构、及拓展编辑器(拓展Project视图)

目录

3 拓展编辑器

3.2拓展Hierarchy视图

3.2.1拓展菜单

3.2.2拓展布局

3.2.3重写菜单

3.3拓展Inspector视图(未完)


 

3 拓展编辑器

3.2拓展Hierarchy视图

3.2.1拓展菜单

修改前菜单

using UnityEngine;
using UnityEditor;

public class Script_03_05
{
    [MenuItem("GameObject/My Create/Cube",false,0)]//参数1:路径,参数2:是否验证函数,参数3:优先级
    static void CreateCube()
    {
        GameObject.CreatePrimitive(PrimitiveType.Cube);//创建立方体
    }
}

修改后菜单 

整体使用和拓展Project视图一致还是比较简单的

3.2.2拓展布局

代码就不放了,使用原理和拓展Project视图的拓展布局基本一致,不过拓展Project视图时是监听EditorApplication.projectWindowItemOnGUI而拓展Hierarchy视图对应的监听是EditorApplication.hierarchyWindowItemOnGUI

EditorApplication - Unity 脚本 API

3.2.3重写菜单

重写前

重写后

using UnityEngine;
using UnityEditor;

public class Script_03_07
{
    [MenuItem("Window/Test/test1")]
    static void Test1()
    {
    
    }
    
    [MenuItem("Window/Test/test2")]
    static void Test2()
    {
    
    }
    
    [MenuItem("Window/Test/test3")]
    static void Test3()
    {
    
    }
    
    [InitializeOnLoadMethod]
    static void StartInitializeOnLoadMethod()
    {
        EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;//添加委托
    }
    
    static void OnHierarchyGUI(int instanceID, Rect selectionRect)//创建对应委托 参数1:实例ID 参数2:选择主体
    {
        if(Event.current != null 
        && selectionRect.Contains(Event.current.mousePosition) 
        && Event.current.button == 1 
        && Event.current.type <= EventType.MouseUp)//条件1:当前有事件发生 条件2:鼠标位置在目标选择主体内 条件3:按下鼠标右键 条件4:鼠标按下或释放
        {
            GameObject selectedGameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;//尝试将对象的引用 转为 实体对象
            if(selectedGameObject) //条件:转换成功
            {
                Vector2 mousePosition = Event.current.mousePosition;//获取鼠标位置
                EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), "Window/Test", null);//弹出菜单 参数1:位置 参数2:展示目录 参数3:我暂时还没弄清楚作用后后面再说
                Event.current.Use();//使用该事件
            }
        }
    }

}

代码的理解需要结合以下官方文档

将实例 ID 转换为对对象的引用:EditorUtility-InstanceIDToObject - Unity 脚本 API

将被立即处理的当前事件:​​Event-current - Unity 脚本 API

UnityGUI 输入和处理事件的类型:EventType - Unity 脚本 API

显示弹出菜单:EditorUtility-DisplayPopupMenu - Unity 脚本 API

3.3拓展Inspector视图(未完)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值