我有一个脚本:
[SerializeField]
private List<UnityAction> m_method = new List<UnityAction>();
private List<Button> m_button = new List<Button>();
void Start()
{
//init m_button
}
// this function is called when the player click on an object in game
void onClick()
{
for(int i=0; i<m_button.Count; i++)
m_button[i].AddListener(m_method[i]);
}
Run Code Online (Sandbox Code Playgroud)
我想从检查器中定义 unityAction,但检查器中没有出现任何内容...我认为它会类似于按钮组件:
有没有一种方法可以将操作绑定到检查器中带有序列化字段的按钮?
你想要的不是UnityAction
,是UnityEvent
,这最后一个可以序列化到检查器上。
UnityForums中对差异进行了很好的解释。
UnityAction
就好像:Run Code Online (Sandbox Code Playgroud)public delegate void UnityAction();
与 普通的 C# 事件相反,
UnityEvent
它只是处理事件的另一种方式,并且很有可能被序列化,以便在编辑器(检查器)中使用。一个简单的例子是 Button 的 onClick 事件。
如果要将 UnityEvent 传递给 AddListener 方法,可以使用如下 lambda 表达式:
btn.onClick.AddListener(() => unityEvent?.Invoke());
Run Code Online (Sandbox Code Playgroud)
注意“ ?
”以避免调用 null(空)操作!
归档时间: |
|
查看次数: |
10263 次 |
最近记录: |