使用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);
}
单击时,克隆的按钮不会向控制台打印任何内容。
有没有办法克隆GameObject
,以便它保留事件监听器?
答案 0 :(得分:2)
运行时侦听器不是持久性的,因此不是序列化的。因此,克隆按钮时不会传递它们。
您必须将该方法添加到脚本中并将脚本附加到预制件上,以便将其序列化,或者像第一个那样通过代码进行分配。
http://blogs.unity3d.com/2014/06/24/serialization-in-unity/
对于AddListener
https://docs.unity3d.com/ScriptReference/Events.UnityEvent.AddListener.html
由于这些原因,我假设非持久化不是序列化的,然后不传递给克隆对象。