自动引用

作者: JervieQin | 来源:发表于2018-07-15 16:31 被阅读25次

背景
创建UI并不是令人愉快的事情,主要是因为你有许多脚本,需要很多的引用,你必须手动分配。如果能让引用都是自己填充的,这不是很好吗?
实现案例

using System.Linq;
using UnityEngine;

public class AutoReferencer<T> : MonoBehaviour where T : AutoReferencer<T> {

   #if UNITY_EDITOR
   // 这个方法在脚本被加到gameobject上时被调用
   protected new virtual void Reset()
   {
       // 反射的魅力
       // 对于类/组件中的每个字段,我们只查找那些为空/ null的字段
       foreach (var field in typeof(T).GetFields().Where(field => field.GetValue(this) == null))
       {
           // 现在我们正在寻找与字段具有相同名称的对象(自身或子物体)
           Transform obj;
           if (transform.name == field.Name)
           {
               obj = transform;
           }
           else
           {
              // 或者你需要实现递归以寻找更深层次的子节点
               obj = transform.Find(field.Name); 
           }

           //如果我们找到与字段具有相同名称的对象,我们将尝试获取将在字段类型中并分配它的组件
           if (obj!=null)
           {
               field.SetValue(this, obj.GetComponent(field.FieldType));
           }
       }
   }
   #endif
}

以下是该实现的使用示例:

using UnityEngine;
using UnityEngine.UI;

public class DialogWindow : AutoReferencer<DialogWindow> {
   public Text DialogLabel;
   public Button ConfirmButton;
}

以下是它在Unity中的效果:

这些引用自动添加!

相关文章

网友评论

    本文标题:自动引用

    本文链接:https://www.haomeiwen.com/subject/zwmppftx.html