码迷,mamicode.com
首页 > 编程语言 > 详细

在Inspector 中 设置添加回调函数 - Unity3d编辑器扩展

时间:2015-07-17 00:34:04      阅读:473      评论:0      收藏:0      [点我收藏+]

标签:unity3d   编辑器   回调函数   inspector   

在做一些开场动画或者其它指定事件触发 一类功能时,需要在编辑环境下设置添加回调函数。

一开始尝试直接使用delegate 来编写,测试发现没有效果,在谷歌搜索到Unity论坛有人提到 delegate 不能被序列化到Inspector 中使用,建议使用 UnityEvent 。


UnityEvent ,其实在UGUI中经常用到,只是平时不知道是它。

比如按钮的点击事件就是

技术分享


直接从 UGUI Button 的源代码中搬运出来。


先提供一个带有 UnityEvent 的类

TimeEventPlugin.cs

using UnityEngine;
using System.Collections;
using UnityEngine.Serialization;
using System;
using UnityEngine.Events;

public class TimeEventPlugin : MonoBehaviour 
{
    [SerializeField]
	public float m_DelayTime;

	[SerializeField]
	public TimeEventTrigger m_TimeEventTrigger=new TimeEventTrigger();


    private float delayTime;


    void Start()
    {
        delayTime = m_DelayTime;

		Debug.Log("TimeEventTrigger ID="+m_TimeEventTrigger.ID);
    }

    void Update()
    {

        delayTime -= Time.deltaTime;
		if (delayTime <= 0)
        {
            delayTime = m_DelayTime;
			m_TimeEventTrigger.m_TimeEvent.Invoke();
        }
    }

}

[Serializable]
public class TimeEventTrigger
{
	public int ID;

	[Serializable]
	public class  TimeEvent:UnityEvent{}
	
	[SerializeField]
	public TimeEvent m_TimeEvent=new TimeEvent();
}

然后编写它 对应的 Editor 类 TimeEventPluginEditor,放在 Editor 目录

using UnityEngine;
using System.Collections;
using UnityEditor;

[CustomEditor(typeof(TimeEventPlugin))]
public class TimeEventPluginEditor : Editor
{
	SerializedProperty m_serializedTimeEventTrigger;

    SerializedProperty m_serializedTimeEvent;

	TimeEventTrigger m_TimeEventTrigger;

	void OnEnable()
	{
		m_serializedTimeEventTrigger = serializedObject.FindProperty("m_TimeEventTrigger");
	}

	public override void OnInspectorGUI ()
	{
		serializedObject.Update();

		TimeEventPlugin plug = target as TimeEventPlugin;
		plug.m_DelayTime=EditorGUILayout.FloatField("m_DelayTime", plug.m_DelayTime);

		EditorGUILayout.PropertyField(m_serializedTimeEventTrigger,true);

		serializedObject.ApplyModifiedProperties();
	}
}

最后编写一个常规脚本 Test.cs,提供一个回调函数注册到 TimeEventPlugin 中

using UnityEngine;
using System.Collections;


public class Test : MonoBehaviour {

    

	// Use this for initialization
	void Start () 
    {
	}

    public void TimeEnd()
    {
        Debug.Log("TimeEnd");
    }
	
	// Update is called once per frame
	void Update () {
	
	}
}

最后在编辑器中的效果如下呈现:

技术分享


例子下载:

http://pan.baidu.com/s/1bnjmKdL


版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.thisisgame.com.cn

在Inspector 中 设置添加回调函数 - Unity3d编辑器扩展

标签:unity3d   编辑器   回调函数   inspector   

原文地址:http://blog.csdn.net/huutu/article/details/46918297

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!