我写了一个类,然后这个类和其子类要求有一些固定的子物体。我希望我把预设拖出来之后再把脚本拖上去就可以自动填充代码中的物体。
如图我创建了一些序列化的Transform:

我希望在挂这个脚本的时候,自动设置这么许多参数,而不用一个一个拖。

首先我找到了这个方法 [ContextMenu("xxx")]:
[ContextMenu("自动添加绑定关系")]
void SetParameters()
{
m_BackGround = transform.Find("BackGroundRoot背景图");
m_MainMenu = transform.Find("MainMenuRoot主界面");
m_SecondaryMenu = transform.Find("SecondaryMenuRoot二级界面");
m_ThirdMenu = transform.Find("ThirdMenuRoot三级界面");
m_Popup = transform.Find("PopupRoot普通弹出框");
m_AlwaysFront = transform.Find("AlwaysFrontRoot提示类弹出框");
}
使用这个特性之后可以在脚本右键选择执行该函数:

但是这样依旧很麻烦,然后发现可以这样:
[ContextMenu("自动添加绑定关系")]
void SetParameters()
{
m_BackGround = transform.Find("BackGroundRoot背景图");
m_MainMenu = transform.Find("MainMenuRoot主界面");
m_SecondaryMenu = transform.Find("SecondaryMenuRoot二级界面");
m_ThirdMenu = transform.Find("ThirdMenuRoot三级界面");
m_Popup = transform.Find("PopupRoot普通弹出框");
m_AlwaysFront = transform.Find("AlwaysFrontRoot提示类弹出框");
}
void Reset()
{
Debug.Log("脚本自动添加绑定关系");
SetParameters();
}
Reset函数会在右键选择Reset的时候调用,以及脚本刚挂上物体的时候调用,因此这里直接这样调用就可以啦,挂载脚本的时候会自动添加相关参数。
全部代码如下:
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UnityEngine;
/// <summary>
/// UI Root
/// </summary>
public abstract class UIRoot : MonoBehaviour
{
protected static UIRoot instance = null;
public static UIRoot Instance
{
get
{
return instance;
}
}
[SerializeField]
private Transform m_BackGround;
/// <summary>
/// 背景图
/// </summary>
public Transform BackGround
{
get { return m_BackGround; }
}
[SerializeField]
private Transform m_MainMenu;
/// <summary>
/// 主界面
/// </summary>
public Transform MainMenu
{
get { return m_MainMenu; }
}
[SerializeField]
private Transform m_SecondaryMenu;
/// <summary>
/// 二级界面
/// </summary>
public Transform SecondaryMenu
{
get { return m_SecondaryMenu; }
}
[SerializeField]
private Transform m_ThirdMenu;
/// <summary>
/// 三级界面
/// </summary>
public Transform ThirdMenu
{
get { return m_ThirdMenu; }
}
[SerializeField]
private Transform m_Popup;
/// <summary>
/// 普通弹出框
/// </summary>
public Transform Popup
{
get { return m_Popup; }
}
[SerializeField]
private Transform m_AlwaysFront;
/// <summary>
/// 提示类弹出框
/// </summary>
public Transform AlwaysFront
{
get { return m_AlwaysFront; }
}
[ContextMenu("自动添加绑定关系")]
void SetParameters()
{
m_BackGround = transform.Find("BackGroundRoot背景图");
m_MainMenu = transform.Find("MainMenuRoot主界面");
m_SecondaryMenu = transform.Find("SecondaryMenuRoot二级界面");
m_ThirdMenu = transform.Find("ThirdMenuRoot三级界面");
m_Popup = transform.Find("PopupRoot普通弹出框");
m_AlwaysFront = transform.Find("AlwaysFrontRoot提示类弹出框");
}
void Reset()
{
Debug.Log("脚本自动添加绑定关系");
SetParameters();
}
}
网友评论