查看: 3468|回复: 0
打印 上一主题 下一主题

[unity3d脚本]编辑器的使用方法一(脚本转控件)

[复制链接]

3795

主题

2

听众

5万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
53202
精华
32

活跃会员 优秀版主 推广达人 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2013-3-2 09:54:41 |只看该作者 |倒序浏览
Unity内置的编辑器,顾名思义就是在编辑状态下使用的,是用来提高开发效率的,当开发者在开发过程中需要对大量资源执行相似操作的时候,就可以使用编辑器来减少这种重复工作带来的开销,这里用到了UnityEditor命名空间。

今天说到的是编辑器的一种用法:将脚本的编辑拓展成控件,即在Inspector视口中不仅仅是对脚本中的共有变量进行编辑,还可以通过GUI,对脚本进行复杂的操作,以达到节省编辑数据时间的目的。


实现方法: 先写一个控件脚本(Control), 作为目的脚本,即要对物体进行的操作,将Control挂到目的物体上;再创建一个脚本(EditorControl), 用来编辑Inspector中的操作,查看Control在Inspector视口下的编辑栏。

EditorControl的写法:
复制代码using UnityEngine;using System.Collections;using UnityEditor;
[CustomEditor(typeof(Control))]public class EditorControl : Editor {
    // Use this for initialization    void Start (){    }        // Update is called once per frame    void Update (){    }
    Control control;    void OnEnable()    {        control = (Control)target;    }
    public override void OnInspectorGUI()    {        base.OnInspectorGUI();        if (GUILayout.Button("please",GUILayout.Width(50f)))        {            control.pref += 1;        }    }}
该脚本中有用的地方:
1.引用了UnityEditor命名空间;
2.定义的编辑器所编辑的脚本类型是Control类型 ( [CustomEditor(typeof(Control))] );
3.继承自Editor而不是Monobehaviour;
4.OnEnable方法,当物体激活的情况下执行;
5.OnInspectorGUI 这个虚方法需要重写,并且在这个方法下编写的GUI组件,将会呈现在Inspector视口下,从而达到我们要的效果。重点是base.OnInspectorGUI();这句,如果没有这句,Inspector中只会显示OnInspectorGUI()里的GUI元素,不会显示Control里的public变量;如果有这句,既会显示共有变量又会显示OnInspectorGUI()里的GUI元素。

这里我用了个简单的例子,Control的代码如下:

复制代码using UnityEngine;using System.Collections;
public class Control : MonoBehaviour {
    public int pref=3;
    private float pref2;
    // Use this for initialization    void Start ()    {    }}
在Inspector下看到的效果如下:


每点击一次please,pref+1.
更多复杂的GUI元素(如slider等),大家可以查看帮助文档。
转载于unity3d圣典论坛,原作者:ljz0225
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-25 07:16 , Processed in 0.113376 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部