// Since Unity doesn't support direct serialization of generics you have to implement this [Serializable] wrapper
[Serializable]
public class MyIntEvent : UnityEvent<int>
{
}
public class ExampleClass : MonoBehaviour
{
public MyIntEvent m_MyEvent;
}
*否,您不能简单地更改UI.Button.onClick的现有实现,它是无参数的。
然而,您可以做的是构建一个新组件并将其附加到按钮上,如
[RequireComponent(typeof(Button))]
public class ExampleClass : MonoBehaviour
{
[SerializeField] private Button _button;
public MyIntEvent onClickWithIntParameter;
private void Awake()
{
if(!_button) _button = GetComponent<Button>();
_button.onClick.AddListener(HandleOnClick);
}
private void HandleOnClick()
{
// Wherever you get your int from
var value = 123;
onClickWithIntParameter.Invoke(value);
}
}
3条答案
按热度按时间uplii1fm1#
是也不是!
*是的,您可以创建自己的事件类型,并将动态回调分配给它。您要查找的是
UnityEvent
。对于动态参数化的,根据您需要的参数数量,请参见
UnityEvent<T0>
到UnityEvent<T0, T1, T2, T3>
。对于具有单个
int
的示例,它将是(与API示例完全相同)*否,您不能简单地更改
UI.Button.onClick
的现有实现,它是无参数的。然而,您可以做的是构建一个新组件并将其附加到按钮上,如
xuo3flqw2#
如果
[Serializable]
不起作用,请尝试顶部的[System.Serializable]
或using System;
。nkcskrwz3#
对于想要创建自定义事件脚本的用户:
我做了一个碰撞检测脚本。当检测到碰撞时,检查器中设置的事件会被调用。就像一个按钮一样。
https://i.stack.imgur.com/r4epP.png