自定义点击列表
Custom onClick list
我可以使用动态和静态列表 onClick
的分组方法创建自定义区域吗?
like this
是也不是! ^^
是的,您可以创建自己的事件类型并为其分配动态回调。您要找的是 UnityEvent
.
对于动态参数化的,请参阅UnityEvent<T0>
to UnityEvent<T0, T1, T2, T3>
,具体取决于您需要多少参数。
对于单个 int
的示例,它将是(与 API 示例完全相同)
// 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);
}
}
我可以使用动态和静态列表 onClick
的分组方法创建自定义区域吗?
like this
是也不是! ^^
是的,您可以创建自己的事件类型并为其分配动态回调。您要找的是
UnityEvent
.对于动态参数化的,请参阅
UnityEvent<T0>
toUnityEvent<T0, T1, T2, T3>
,具体取决于您需要多少参数。对于单个
int
的示例,它将是(与 API 示例完全相同)// 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); } }