第一步:事件定义
新建脚本
//事件定义Define Events
public class GradeEvents//成绩事件
{
public event Action<int> onGradeUpdate;
public void GradeUpdate(int grade)
{
onGradeUpdate?.Invoke(grade);
}
}
第二步:事件管理器
再建事件管理器脚本:
public class GameEventsManager : MonoBehaviour
{
public static GameEventsManager Instance { get; private set; }
//事件声明
public GradeEvents gradeEvents;//成绩事件
private void Awake()
{
//设置单例实例为当前实例
if (Instance == null)
{
Instance = this;
}
else
{
Destroy(gameObject);
}
//初始化所有事件
gradeEvents = new GradeEvents();//初始化成绩事件
}
}
第三步:事件注册与注销
然后在需要订阅事件的脚本中,注册事件和注销事件,事件方法处理
public class XXXXXScripts : MonoBehaviour
{
public int currentGrade =0;
//事件处理
private void GradeUpdate(int grade)
{
currentGrade += grade;
}
//事件注册
private void OnEnable()
{
GameEventsManager.Instance.gradeEvents.onGradeUpdate += GradeUpdate;
}
//事件注销
private void OnDisable()
{
GameEventsManager.Instance.gradeEvents.onGradeUpdate -= GradeUpdate;
}
}
第四步:事件触发
最后在需要触发该事件的脚本中,进行事件触发,通知所有注册该事件的订阅者去执行自己的事件处理方法。
public grade=20 //示例字段
GameEventsManager.Instance.gradeEvents.GradeUpdate(grade);