博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity扩展 自定义事件Send组件
阅读量:5009 次
发布时间:2019-06-12

本文共 2978 字,大约阅读时间需要 9 分钟。

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

UIButton Message组件不能传递参数.

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

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

如图:

组件类:

using UnityEngine;using System.Collections;namespace PlateFace{    ///     /// 消息Send组件    ///     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();        }      }}

三个脚本预览图:

转载于:https://www.cnblogs.com/plateFace/p/4326278.html

你可能感兴趣的文章
C#中的特性(Attributes)
查看>>
列表、元组、字典、集合的定义、操作与综合练习
查看>>
设计模式六大原则(5):迪米特法则
查看>>
iOS中使用nil NULL NSNULL的区别
查看>>
操作系统实验3:内存分配与回收
查看>>
Paul Graham:梦寐以求的编程语言
查看>>
C#开发中使用配置文件对象简化配置的本地保存
查看>>
工厂模式
查看>>
Shiro学习
查看>>
9、第九节课jquery选择器jq2,20151007
查看>>
java.lang.NoSuchMethodException
查看>>
职场培训师的一些建议
查看>>
linux中Daemon守护进程编程
查看>>
java复制整个文件夹(对大文件的操作)
查看>>
anaconda的安装以及tensorflow环境的搭建
查看>>
Java构造方法、重载及垃圾回收
查看>>
.Net Core AES加密解密
查看>>
快速幂竞赛模板
查看>>
Close与Dispose的区别
查看>>
Spring Quartz实现任务调度
查看>>