(一)开始学习拓展编辑器

nity拥有非常丰富的拓展编辑器接口,如果是在网上下载过别人写的插件,你会发现为什么它的监测面板视图和普通的不一样?其实是他通过代码自己绘制的监测面板,这篇博文MOMO带大家来学习编辑器。如下图所示,这是我通过代码拓展的面板视图。

 下一条简单的脚本,绑定挂在摄像机上。

using UnityEngine;
using System.Collections;
 
public class Test : MonoBehaviour
{
    public Rect mRectValue ;
	public Texture texture;
}

如图所示,在监测面板视图中它是一个很普通的结构。

下面我们需要在代码中动态的编辑它。请在你的Project视图中创建一个Editor文件夹,如果有的话就不用创建。把脚本MyEditor放进Editor文件夹中。

MyEditor.cs

 
using UnityEditor;
using UnityEngine;
 
//自定义Tset脚本编辑器
[CustomEditor(typeof(Test))] 
//在编辑模式下执行脚本,这里用处不大可以删除。
[ExecuteInEditMode]
//请继承Editor
public class MyEditor : Editor 
{
	//在这里方法中就可以绘制面板。
    public override void OnInspectorGUI() 
	{
        //base.OnInspectorGUI();    // 如果没注释,这行代码会在Inspect面板按默认方式绘制public字段。下面再创建就会多一份。如果注释了,下面也没创建对应的字段,那Inspect面板就不会显示任何字段。

		//得到Test对象
        Test test = (Test) target;
		//绘制一个窗口
		test.mRectValue = EditorGUILayout.RectField("窗口坐标", test.mRectValue);    // 必须赋值给原来字段。否则,绘制出来的RectField无法修改,只能引用默认的learnStart.rect。
		//绘制一个贴图槽
		test.texture =  EditorGUILayout.ObjectField("增加一个贴图",test.texture,typeof(Texture),true) as Texture;
 
	}
}
 

 编辑器的用法非常简单,OnInspectorGUI()方法中可以绘制控件,EditorGUI和EditorGUILayout可创建编辑器控件,和GUI的用法非常相像。如图所示,在回到Test的面板中,新的面板已经映入眼帘。对于其它控件的使用,大家可以自行去API中查阅,。原理都差不多。

 值得一提的是C#语言提供了一个非常赞的方法,它可以让你的数据更加的安全,并且可以在Get Set方法中监听到你获取与赋值的操作,推荐使用这种方法。简单的改一下Test.cs

 
using UnityEngine;
using System.Collections;
 
public class Test : MonoBehaviour
{
 
	[HideInInspector][SerializeField] Rect pRectValue ;
    public Rect mRectValue 
	{
        get
		{
			return pRectValue; 
		}
        set 
		{
            pRectValue = value;
        }
    }
 
	[HideInInspector][SerializeField] Texture pTexture ;
    public Texture texture 
	{
        get
		{
			return pTexture; 
		}
        set 
		{
            pTexture = value;
        }
    }
 
}
 

举例说明一下 [HideInInspector][SerializeField] 隐藏数据在面板,并且序列化。它可以帮我们永久保存数据,如果不加的话数值就会重置。就好比我先添加了一个贴图,一运行游戏刚刚添加的贴图就变成null了。

还是以texture为例,当我们使用texture对象的时候,它会进入get板块快获取私有变量pTexture的值。当编辑器更改texture的时候,会进入set版块,将数值保存在pTexture中。这样你的数据会更加安全,因为这里操作的是当前类中的一个私有变量。也可以在get/set版块中加入一些特殊的代码。

最后在update()或者OnGUI中就可以直接用texture 对象了。当然也可以是你定义的任意对象。

最后是本文的下载 Sina Visitor System

欢迎大家踊跃留言,一起讨论学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值