• 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

    如果你感兴趣,你可以把你妹妹介绍给我
  • 相关阅读:
    HDU 六度分离
    HDU 找到唯一的冠军
    最短路径问题
    (拓扑排序)确定比赛名次
    Shortest Prefixes
    2768: [JLOI2010]冠军调查( 最小割 )
    BZOJ 1927: [Sdoi2010]星际竞速(最小费用最大流)
    BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)
    BZOJ 2424: [HAOI2010]订货(最小费用最大流)
    BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)
  • 原文地址:https://www.cnblogs.com/plateFace/p/4326278.html
Copyright © 2020-2023  润新知