Unity编辑器拓展<二>

四.场景视图拓展

新建两个文件夹Script,Editor,将我们的脚本都放在Script里,新建一个脚本ChangeObjInfor,再新建一个脚本SceneEditor

让SceneEditor继承Editor类,在这里,我们要使用Editor类,就必须把脚本放在Editor文件夹中,才能驱动这个脚本。

引用一下Editor的命名空间UnityEditor,我们需要在Scene场景中绘制一个UI,需要使用OnSceneUI的方法

    private void OnSceneGUI()
    {
        Handles.BeginGUI();//开始绘制GUI
        GUILayout.BeginArea(new Rect(0, 0, 150, 200));//绘制GUI的显示区域
        GUILayout.Label("选择颜色");//添加文字提示
        if (GUILayout.Button("黄色"))//添加按钮
        {
            
        }
        GUILayout.EndArea();//结束区域
        Handles.EndGUI();//结束GUI
    }

自定义脚本

[CustomEditor(typeof(ChangeObjInfor))]

自定义完以后,我们得到脚本所挂载的物体目标

Target就是我们脚本所挂载的目标,是在Editor类里面

ChangeObjInfor theTarget = (ChangeObjInfor)target;

回到场景,我们新建一个Cube,然后把我们的ChangeObjInfor挂载到Cube上,就可以看到Scene场景中有了三个按钮,当我们点击的时候,就可以输出相应的Debug。

下面我们真正的修改一下cube的颜色,回到代码中,我们获取一下目标的材质

theTarget.GetComponent<Renderer>().sharedMaterial.color = Color.red;

我们也可以在场景中绘制一下Cube的坐标

参数;坐标 要显示的东西

Handles.Label(theTarget.transform.position, theTarget.name + ":" + theTarget.transform.position.ToString());

现在Scene就显示坐标了,当我们移动cube,坐标也会改变

五.自定义窗口

在Editor中新建一个脚本MyWindowEditor,继承EditorWindow,引用命名空间UnityEditor

首先我们在GameObject下绘制一个菜单按钮

[MenuItem("GameObject/ShowWindow")]

然后我们来绘制,在点击ShowWindow的时候弹出一个窗口

	Rect theRect = new Rect(0, 0, 500, 500);//绘制窗口的大小和位置
        MyWindowEditor window =(MyWindowEditor) EditorWindow.GetWindowWithRect(typeof(MyWindowEditor), theRect, true, "我的窗口");
	//绘制窗口,四个参数:类型,坐标和大小,bool值(控制窗口的类型,窗口有两种类型,一种是独立类型一种是选项卡类型,true是独立窗口),窗口名称。
        window.Show();//显示窗口

我们可以在窗口里面绘制我们需要的东西

绘制一个可以启用的分组

我们还可以在窗口里面打开系统自带的通知

绘制两个按钮

我们可以再绘制一个关闭窗口的按钮

窗体里面常用的函数

    private void OnFocus()
    {
        Debug.Log("窗口被选中");
    }
    private void OnLostFocus()
    {
        Debug.Log("窗口失去选中");
    }
    private void OnHierarchyChange()
    {
        Debug.Log("层次面板的对象发生改变");
    }
    private void OnProjectChange()
    {
        Debug.Log("项目面板的对象发生改变");
    }
    private void OnSelectionChange()
    {
        foreach (Transform item in Selection.transforms)
        
            {
            Debug.Log("被选中的物体是:" + item.name);
            }
    }
    private void OnDestroy()
    {
        Debug.Log("窗口被关闭了");
    }

六.其他扩展

我们在Script中添加一个脚本Test

1.想要实现,当我给一个物体添加Text脚本时,自动添加一个刚体组件

[RequireComponent(typeof(Rigidbody))]

我们这样添加的Rigidbody是不能删除了,防止了我们的误操作

如果我们想要挂载其他的组件也是一样的,只要在typeof里加入组件的名字

2.我们还可以把脚本当做组件来快速添加,可以把脚本放在Component里面

[AddComponentMenu("Script/Test")]

3.组件的右键操作


写一个方法,在方法上面添加

    [ContextMenu("测试")]
    public void TestMenu()
    {

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值