zoukankan      html  css  js  c++  java
  • Unity扩展 自定义事件Send组件

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

    UIButton Message组件不能传递参数.

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

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

    如图:

    image

    image

    组件类:

    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();
            }  
        }
    }

    三个脚本预览图:

    image

    如果你感兴趣,你可以把你妹妹介绍给我
  • 相关阅读:
    OA 办公自动化系统:权限管理模块的实现原理思路
    Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/annotations/Entity
    Spring —— 三种配置数据源的方式:spring内置、c3p0、dbcp
    使用JdbcTemplate简化JDBC操作 实现数据库操作
    Spring aop——前置增强和后置增强 使用注解Aspect和非侵入式配置
    ( 解压缩版 免安装版 或 zip版 )如何修改mysql5.6.24 字符编码
    手机开发插件安装Xamarin
    JQuery对象转dom ,dom转jQuery
    读取XML
    【Android】完善Android学习(六:API 4.0)
  • 原文地址:https://www.cnblogs.com/plateFace/p/4326278.html
Copyright © 2011-2022 走看看