(player死亡,manager给enemy发送广播示例)
public interface IEndGameObserver {
void EndNotify();
}
//给enemy添加广播
using UnityEngine;
public class EnemyController : MonoBehaviour,IEndGameObserver
{
//每个EnemyController 生成的时候被添加到管理者里面
void OnEnable() {
GameManager.Instance.AddObserver(this);
}
//每个EnemyController 删除的时候从管理者里面移除掉
void OnDisable() {
GameManager.Instance.removeObserver(this);
}
public void EndNotify()
{
Debug.Log("收听广播")
}
}
//管理者
using System.Collections.Generic;
using UnityEngine;
public class GameManager : Singleton<GameManager>
{
//游戏结束收听广播的列表
List<IEndGameObserver> endGameObservers = new List<IEndGameObserver>();
public void AddObserver(IEndGameObserver observer){
endGameObservers.Add(observer);
}
public void removeObserver(IEndGameObserver observer){
endGameObservers.Remove(observer);
}
//!游戏结束给列表中所有的observer发送广播的接口
public void NotifyObserver(){
foreach(var observer in endGameObservers){
observer.EndNotify();
}
}
}
//调用者
using UnityEngine;
public class PlayerController : MonoBehaviour{
void Update()
{
//血量为0,玩家死亡,GameManager发送游戏结束的广播
isDead = characterStats.CurrentHealth == 0;
if(isDead){
GameManager.Instance.NotifyObserver();
}
}
}