我读到了有关UnityEvent的信息并试图实现它。
我有一个" GameController.cs"脚本,附加到GameObject" ScriptsHolder",以及" target.cs"附加到Prefab GameObject的脚本,名为" target"。
"目标"在启动时不在场景中:我在某个点启动多个目标,这些目标被重命名为" target0"," target1",...
当目标受到伤害时,我希望它将其名称发送给GameController.cs,后者具有破坏该对象的空白。 这就是我的所作所为:
target.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class target : MonoBehaviour {
public UnityEvent damageEvent;
void Damage(float damage)
{
damageEvent.Invoke();
}
}
接下来,我点击我的目标预制件,然后在检查器中,我尝试添加" ScriptsHolder"到伤害事件。这就是我的问题:我无法在损坏事件中删除ScriptsHolder。做了一些测试,其原因似乎是"目标"还没有出现在我的场景中。
所以我读到了添加一个监听器,但我无法弄清楚如何做到这一点。
我在这里" GameController.cs ":
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class GameController : MonoBehaviour {
UnityEvent damageEvent;
void Awake()
{
damageEvent.AddListener(targetReceivedDamage);
}
void targetReceivedDamage()
{ // do some stuff }
}
但这并不奏效。我究竟做错了什么?或者我如何将ScriptsHolder添加到损坏事件中,即使" target"不在场景中吗?
非常感谢任何帮助!
答案 0 :(得分:2)
实例化目标对象时需要添加侦听器。例如:
将预制件声明更改为目标类型,并在检查器中重新指定目标预制件。
public Target targetPrefab;
然后
Target target = Instantiate(targetPrefab);
target.damageEvent.AddListener(targetReceivedDamage);
希望这会有所帮助:)