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

Unity扩展 自定义事件Send组件

时间:2015-03-10 16:59:27      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

在写项目的时候,我创建了一个方法里面需要一个int的参数.  我记得是UIEvent Trigger 不能直接传递一个数字,最多只能传递一个GameObject属性过去(=.=那个值不想再组件上定义)

UIButton Message组件不能传递参数.

UIEvent Trigger组件 传递GameObject某个组件的属性过去

感觉这两个都不是很合适就自己写了一个SendMessage组件

如图:

技术分享

技术分享

组件类:

using UnityEngine;
using System.Collections;

namespace PlateFace
{
    /// <summary>
    /// 消息Send组件
    /// </summary>
    public class SendMessageTo : MonoBehaviour {

        public enum MesType
        {
            @default,
            @int,
            @string,
            @object
        }

        public GameObject tager;
        public string functionName;

        public MesType MessageType = MesType.@default;
        public int @int;
        public string @string;
        public GameObject @object;


        void OnClick()
        {
            if (tager != null && functionName != "")
            {
                switch (MessageType)
                {
                    case MesType.@default:
                        tager.SendMessage(functionName);
                        break;
                    case MesType.@int:
                        tager.SendMessage(functionName, @int);
                        break;
                    case MesType.@string:
                        tager.SendMessage(functionName, @string);
                        break;
                    case MesType.@object:
                        tager.SendMessage(functionName, @object);
                        break;
                    default:
                        break;
                }
            }
        }
        
    }
}

InspectorIEdtor扩展

using UnityEngine;
using UnityEditor;
using System.Collections;

namespace PlateFace
{

    [CustomEditor(typeof(SendMessageTo))]
    public class SendMessageToEditor : Editor
    {   
        public override void OnInspectorGUI()
        {
            SendMessageTo item = target as SendMessageTo;
            serializedObject.Update();  // 序列化更新
            
            
            item.tager = EditorGUILayout.ObjectField("目标:", item.tager, typeof(GameObject)) as GameObject;
            item.functionName = EditorGUILayout.TextField("方法名:", item.functionName).ToString();
            EditorGUILayout.PropertyField(serializedObject.FindProperty("MessageType"));

            switch (item.MessageType)
            {
                case SendMessageTo.MesType.@default:

                    break;
                case SendMessageTo.MesType.@int:
                    item.@int = EditorGUILayout.IntField("参数(int)", item.@int);
                    break;
                case SendMessageTo.MesType.@string:
                    item.@string = EditorGUILayout.TextField("参数(string)", item.@string).ToString();
                    break;
                case SendMessageTo.MesType.@object:
                    item.@object = EditorGUILayout.ObjectField("参数(object)", item.@object, typeof(GameObject)) as GameObject;
                    break;
            }

            // 更新编辑后的数据。         
            serializedObject.ApplyModifiedProperties();
        }  
    }
}

三个脚本预览图:

技术分享

Unity扩展 自定义事件Send组件

标签:

原文地址:http://www.cnblogs.com/plateFace/p/4326278.html

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