我有两个对象:CharacterController(或任何后代)和VisualController(或任何后代)。 CC有一组定义的事件(即死亡/受到伤害),VC可以订阅并以某种方式作出反应(播放动画)。如果脚本名称是任意的(因为它可能不是CC,而是它的后代),我可以用什么方式订阅VC到CC?所以我不能按名称获取游戏对象组件?
答案 0 :(得分:0)
如果您的活动是UnityEvent,那么您只需拖放检查器中的插槽即可。
如果您使用.NET事件,它就像任何方法一样工作,您需要获取持有脚本的对象,然后您才能接受公共事件。
public class EventHolder:MonoBehaviour{
public EventHandler<EventArg> RaiseEvent;
protected void OnRaiseEvent(EventArg args){
if(RaiseEvent != null){
RaiseEvent(this, arg);
}
}
void Update(){
if(condition) { OnRaiseEvent(this, new EventArg()); }
}
}
public class EventListener:MonoBehaviour{
private EventHolder eh;
private void Start(){
GameObject obj = GameObject.Find("ObjectName");
eh = obj.GetComponent<EventHolder>();
if(eh != null){ eh.RaiseEvent += ListenEvent }
}
private void OnDestroy(){
if(eh != null){
eh.RaiseEvent -= ListenEvent;
eh = null;
}
}
private void ListenEvent(object sender, EventArg arg){}
}
这是遵循.NET事件模式,但您可以跳过整个EventArg进程并使用Action。你的选择。