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

    如果你感兴趣,你可以把你妹妹介绍给我
  • 相关阅读:
    vue中打印 使用mapState映射 vuex state 中的数据 结果显示 [__ob__: Observer]的问题
    css里面鼠标的形状-----》easyui哪点事
    多张表进行关联查询---->删除某个数据的时候出现还有子记录的提示
    MyEclipse迁移过程中Tomcat版本不一致的解决办法
    Easyui里面动态设置输入框的可见性
    PL/SQL那点事-->修改Oracle数据库里面的字段长度
    PL/SQL那点事-->SqlSession operation; SQL []; ORA-01722: 无效数字
    PL/SQL数据开发那点事
    PL/SQL数据库开发那点事
    java类型与jdbc类型对应表
  • 原文地址:https://www.cnblogs.com/plateFace/p/4326278.html
Copyright © 2011-2022 走看看