博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity Inspector 给组件自动关联引用(二)
阅读量:5113 次
发布时间:2019-06-13

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

通过声明的变量名称,主动关联引用.

使用这个关联引用两种方式

1.  给你组件继承  MonoAutoQuote 点击组件inspector 按钮执行
2.  给你组件类添加[AAutoQuote] 特性  通过Plateface/SetSelectGameRef 执行

 

[AAutoQuote]public class MonoAutoQuote : MonoBehaviour ,IAutoQuote{}

public interface IAutoQuote { }

public class AAutoQuote : Attribute {}

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using System.Reflection;//[CanEditMultipleObjects][CustomEditor(typeof(MonoAutoQuote), true)]public class AutoQuoteEditor : Editor{    public override void OnInspectorGUI()    {        base.OnInspectorGUI();        if (GUILayout.Button("关联子节点引用"))        {            Component c = target as Component;            if (c != null)                AutioQuoteMenu.SetRef(c, c.gameObject);        }    }}public class AutioQuoteMenu{    [MenuItem("Plateface/SetSelectGameRef %&A")]    public static void SetRef()    {        GameObject o = Selection.activeGameObject;        if (o != null)        {            Component[] cAry = o.GetComponents
(); foreach (var c in cAry) { System.Type componentType = c.GetType(); if ((typeof(MonoBehaviour).IsAssignableFrom(componentType)) || IsHasAttribute(componentType)) { SetRef(c, o); } } } } public static void SetRef(Component c, GameObject o) { System.Type t = c.GetType(); var infoList = t.GetFields(BindingFlags.Public | BindingFlags.Instance); System.Text.StringBuilder sb = new System.Text.StringBuilder(); string name = string.Empty; foreach (var item in infoList) { var fieldType = item.FieldType; if ((typeof(MonoBehaviour).IsAssignableFrom(fieldType))) { if (item.Name.StartsWith("m")) { name = item.Name.Substring(1); Transform tr = o.transform.Find(name); if (tr == null) { Debug.LogError(name + "引用没找到"); continue; } Component com = tr.GetComponent(fieldType); item.SetValue(c, com); } } } } public static bool IsHasAttribute(System.Type type) { System.Object[] oList = type.GetCustomAttributes(typeof(AAutoQuote), false); foreach (var item in oList) { if ((item as AAutoQuote) != null) return true; } return false; }}

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

你可能感兴趣的文章
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Python IO模型
查看>>