项目进入上线阶段了, 有一些地方需要总结和优化.  我发现UI一改变,我就要拖很久的UI。 UI结构发生改变我还必须给一些变量设置好引用,后来我去看别人预设的时候组件拖放的变量至少10个以上, 它们一旦丢失了引用了, 作为一个外人就很难把他们关联起来.  预设就定义了m_xxx名字必须和GameObject名字一样, 这样就方便其他人帮你修复预设的引用啦.

今天就突然想起写一个辅助用具, 一键把一些简单的引用帮我赋值上去. 就再也不用手动拖啦.

代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine;
using UnityEditor;
using System;
using System.Reflection; public class PLAutoAssignment : MonoBehaviour
{ /// <summary>
/// 变量名存在_, m_name, name代表你要去搜索的GameObject名字,再根据类型自动赋值到该变量上面去,
/// m_name_a, a代表你要去搜索的GameObject名字
/// </summary>
[MenuItem("Plateface/AutoAssignment %F1")]
public static void AutoAssignment()
{
Debug.ClearDeveloperConsole(); GameObject go = Selection.activeGameObject;
//Debug.Log(go.name); IAutoAssignment com = go.GetComponent<IAutoAssignment>(); Type e = com.GetType();
var fiedlAry = e.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); object valueObj = null;
object[] attrAry = null;
bool isSeriualizeField = false;
Component[] comAry = null;
string gameObjectName = string.Empty; foreach (var item in fiedlAry)
{
//Debug.Log(item.Name + "-" + item.FieldType.Name + " - "); valueObj = item.GetValue(com);
if (item.Name.Contains("_"))
{
gameObjectName = item.Name.Substring(item.Name.LastIndexOf('_') + 1);
}
else
{
gameObjectName = item.Name;
} if (item.FieldType.IsClass && valueObj == null || "null".Equals(valueObj.ToString()))
{ if (!item.IsPublic)
{
attrAry = item.GetCustomAttributes(typeof(SerializeField), false);
for (int i = 0; i < attrAry.Length; i++)
{
if (attrAry[i] is SerializeField)
{
isSeriualizeField = true;
break;
}
}
} if (item.IsPublic || isSeriualizeField)
{ Transform[] tfAry = go.GetComponentsInChildren<Transform>(true); for (int i = 0; i < tfAry.Length; i++)
{
if (tfAry[i].name == gameObjectName)
{
if (item.FieldType.Name == "GameObject")
{
item.SetValue(com, tfAry[i].gameObject);
break;
}
else
{
comAry = tfAry[i].GetComponents<Component>();
for (int j = 0; j < comAry.Length; j++)
{
if (comAry[j].GetType().Name == item.FieldType.Name)
{
item.SetValue(com, comAry[j]);
break;
}
}
}
break;
}
}
}
isSeriualizeField = false;
}
}
}
} public interface IAutoAssignment { }

Unity Inspector 给组件自动关联引用的更多相关文章

  1. Unity Inspector 给组件自动关联引用(二)

    通过声明的变量名称,主动关联引用. 使用这个关联引用两种方式1.  给你组件继承  MonoAutoQuote 点击组件inspector 按钮执行2.  给你组件类添加[AAutoQuote] 特性 ...

  2. 022 component(组件)关联映射

    Component关联映射: 目前有两个类如下: 值对象没有标识,而实体对象具有标识,值对象属于某一个实体,使用它重复使用率提升,而且更清析. 以上关系的映射称为component(组件)关联映射 在 ...

  3. Qt 编程指南 3_1 按钮弹窗手动和自动关联示例

    触发的两种模式 connect() 和 on_控件ID_控件函数(参数) 两者优缺点对比: 虽然 Qt 有比较好用的自动关联大法,但自动关联不是万能的,尤其是涉及到多个窗体的时候,比如 A 窗体私有按 ...

  4. C# 组件模组引用第三方组件问题

    对接上一文章由于是动态加载指定程序集,会把当前目录下所有dll都加载进来.如果像sqlite这种第三组件调用了由C.C++非.net语言所以生成的Dll.因为自动生成的原因.会把非C#生成的dll都加 ...

  5. 二、Vue组件(component):组件的相互引用、通过props实现父子组件互传值

    一.组件各部分说明及互相引用 1.一个vue组件由三个部分组成 Template 只能存在一个根元素 2.Script 3.Style scoped:样式只在当前组件内生效 1.1 组件的基本引用代码 ...

  6. Qt信号与槽自动关联机制

    参考链接1:http://blog.csdn.net/skyhawk452/article/details/6121407 参考链接2:http://blog.csdn.net/memory_exce ...

  7. Hibernate组件和关联映射

    一.基本定义 组件:建立一个类,为了方便代码复用和建立模型,但类在数据库中并没有对应的表,此类可以作为一个组件插入到其他类中(有数据表的类) 组件和关联映射的关系是组件是没有对应的类;组件是值类型的, ...

  8. Android Studio2.x版本无法自动关联源码的解决方法

    Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...

  9. 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明

    一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...

随机推荐

  1. Android自定义属性、控件三步法

    第二步中layout-activity_main.xml 中自命名控件: xmlns:android="http://schemas.android.com/apk/res/android& ...

  2. Managing linux Shell Jobs

    Managing Shell Jobs   When moving jobs between the foreground and background, it may be useful to ha ...

  3. NYOJ 284 坦克大战 bfs + 优先队列

    这类带权的边的图,直接广搜不行,要加上优先队列,这样得到的结果才是最优的,这样每次先找权值最小的,代码如下 #include <stdio.h> #include <iostream ...

  4. z-index优先级总结

    因为显示器显示的图案是一个二维平面,拥有x轴和y轴来表示位置属性.为了表示三维立体的概念如显示元素的上下层的叠加顺序引入了z-index属性来表示z轴的区别,表示一个元素在叠加顺序上的上下立体关系. ...

  5. (转)Discuz!NT图文安装教程

    不同目录下的安装方法根据目前大家对论坛的使用需求,在安装上面大致有三种情况,站点根目录下安装,站点虚拟目录下安装和站点子目录下安装. 1.根目录安装 根目录安装是最简单也是稳定系数最高的安装和使用方式 ...

  6. pod update或者pod install很慢

    最近使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动 原因在于当执行以上两个命令的时候会升级Co ...

  7. 了解JVM

    ---恢复内容开始--- Java对象在运行环境中,对于内存而言,存在三种状态:年轻代.年老代.永生代: 下图是JVM内存模型 1. 年轻代被分为3个部分:Enden区和两个Survivor区,垃圾回 ...

  8. Java泛型的基本应用

    一.泛型概述 jdk1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制. 好处: 1,将运行时期的问题ClassCastException转到了编译时期. 2,避免了强制转换的麻烦. 什么时 ...

  9. START WITH CONNECT BY PRIOR 链表查询

    使用场景:排序 设计思路,id为主键,index为顺序,index存前一个节点的id,当然,按照这个思路可以实现双向链表的(preindex存前一个节点,nextindex存下一个节点) 这样的话排序 ...

  10. 深度围观block:第三集

    深度围观block:第三集 发布于:2013-07-12 10:09阅读数:7804 本文是深度围观block的第三篇文章,也是最后一篇.希望读者阅读了之后,对block有更加深入的理解,同时也希望之 ...