我想要做一件简单的事情:
- 创建一个新的
GameObject
。 - 给这个
GameObject
添加一个Button
组件。 - 为
Button
的OnClick
事件添加一个持续性监听器。
我正在尝试注册的方法在另一个脚本中。以下是我正在尝试的代码片段:
MyScript myScriptInstance = FindObjectOfType<MyScript>();
var go = new GameObject();
var btn = go.AddComponent<Button>();
var targetinfo = UnityEvent.GetValidMethodInfo(myScriptInstance,
"OnButtonClick", new Type[]{typeof(GameObject)});
var action = (UnityAction) Delegate.CreateDelegate(typeof(UnityAction),go, targetinfo, false);
UnityEventTools.AddPersistentListener(btn.onClick, action);
MyScript.cs看起来像这样:
public class MyScript : MonoBehaviour
{
public void OnButtonClick(GameObject sender)
{
// do some stuff here.
}
}
当我运行这段代码时,按钮的Onclick监听器为空,如下图所示:
如果我更改该行
var action = (UnityAction) Delegate.CreateDelegate(typeof(UnityAction),
go, targetinfo, false);
到
var action = (UnityAction) Delegate.CreateDelegate(typeof(UnityAction),
go, targetinfo, true);
我得到:
参数异常:方法参数长度不匹配 System.Delegate.CreateDelegate(System.Type类型,System.Object第一个参数,System.Reflection.MethodInfo方法,Boolean throwOnBindFailure)
我按照这些说明操作,但不知道出了什么问题。
非常感谢任何形式的帮助。
EventSystems.IPointerClickHandler
吗? - Ian H.