在运行时使用Instantiate()克隆按钮时(该onClick
事件包含侦听器),该侦听器不存在于克隆中。
可以通过使Canvas具有按钮并附加以下脚本来测试该行为:
void Start () {
var button = transform.GetChild (0);
button.GetComponent<Button> ().onClick.AddListener (new UnityAction(() => Debug.Log("Event triggered!")));
var button2 = Instantiate (button);
button2.SetParent (transform);
}
单击克隆按钮将不会在控制台上打印任何内容。有没有一种方法可以克隆aGameObject
以便保留事件侦听器?
运行时侦听器不是持久性的,因此无法序列化。结果,当您克隆按钮时,它们不会继续传递。
您要么必须将方法添加到脚本中,然后将脚本附加到预制件上才能进行序列化,要么像对第一个脚本一样通过代码进行分配。
http://blogs.unity3d.com/2014/06/24/serialization-in-unity/
至于AddListener
https://docs.unity3d.com/ScriptReference/Events.UnityEvent.AddListener.html
由于这些原因,我假设非持久对象没有序列化,然后没有传递给克隆的对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句