Unity扩展 自定义事件Send组件

在写项目的时候,我创建了一个方法里面需要一个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 = [email protected];
        public int @int;
        public string @string;
        public GameObject @object;

        void OnClick()
        {
            if (tager != null && functionName != "")
            {
                switch (MessageType)
                {
                    case [email protected]:
                        tager.SendMessage(functionName);
                        break;
                    case [email protected]:
                        tager.SendMessage(functionName, @int);
                        break;
                    case [email protected]:
                        tager.SendMessage(functionName, @string);
                        break;
                    case [email protected]:
                        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 [email protected]:

                    break;
                case [email protected]:
                    [email protected] = EditorGUILayout.IntField("参数(int)", [email protected]);
                    break;
                case [email protected]:
                    [email protected] = EditorGUILayout.TextField("参数(string)", [email protected]).ToString();
                    break;
                case [email protected]:
                    [email protected] = EditorGUILayout.ObjectField("参数(object)", [email protected], typeof(GameObject)) as GameObject;
                    break;
            }

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

三个脚本预览图:

时间: 2024-11-03 09:25:33

Unity扩展 自定义事件Send组件的相关文章

vue自定义事件将组件内的数据传输到实例中去使用

vue自定义事件将组件内的数据传输到实例中去使用 <body> <div id="app"> <h1 style="color:deeppink">{{ outer_title }}</h1> //③给实例绑定一个方法 <hello :reader="new_msg"  v-on:chang_event="chang_tit"></hello> </

vue自定义事件 子组件把数据传出去

每个 Vue 实例都实现了事件接口(Events interface),即: 使用 $on(eventName) 监听事件 使用 $emit(eventName) 触发事件 1.使用v-on绑定自定义事件 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 <s

Unity 编辑器扩展自定义窗体

这次看见Unity还可以自定义弹出窗体,让我很好奇.于是就去网上找文章看了看. 如果想自定义窗体需要把类放入Editor文件夹下面. 代码如下: using UnityEngine; using UnityEditor; public class MyEditor : EditorWindow { [MenuItem("GameObject/window")] static void AddWindow() { Rect wr = new Rect(0, 0, 500, 500); M

浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

原文:浏览器扩展系列----给MSTHML添加内置脚本对象[包括自定义事件] 使用场合: 在程序中使用WebBrowser或相关的控件如:axWebBrowser等.打开本地的html文件时,可以在html的脚本中使用自己在.net中定义的类,实现与Internet Explorer server的互操作.此外也可以在充分利用html在设计界面方面高效,简单的同时,也可以实现一些复杂的特性. 实现: Code Code highlighting produced by Actipro CodeH

Vue组件绑定自定义事件

Vue组件使用v-on绑定自定义事件: 可以分为3步理解: 1.在组件模板中按照正常事件机制绑定事件: template: '<button v-on:click="increment">{{ counter }}</button>', 如上,v-on:click就是用来给子组件绑定点击事件的,这就是原生的自带的事件,容易理解. 2.子组件的事件发生时,在事件函数中向父组件"报告"这一事件(使用$emit): methods: { incre

Flex的自定义事件(组件)的那些事儿

Demo:Login 1.创建一个UserLogin类. package com { [Bindable] public class UserLogin { public var logUserNam:String=""; //用户名 public var logUserPass:String=""; //用户密码 public var logCompanyNam:String=""; //公司名称 public function UserLog

vue组件-子组件向父组件传递数据-自定义事件

自定义事件 我们知道,父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,应该怎样做?那就是自定义事件!

自定义事件拖拽组件

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>自定义事件拖拽组件</title> <style> #div1{ width:100px; height:100px; background:red; position:abs

【vue】vue组件的自定义事件

父组件: <template> <div> <my-child abcClick="sayHello"></my-child> </div> </template> <script> export default { method: { sayHello(Num,Str) { alert('hello world~~' + Num + Str) } } } </script> 子组件: &l