事件系统用途广泛,对处理玩家数据有很大帮助(玩家金币,经验,等级),让数据多次调用,降低耦合
在unity中应用(以玩家金币发生变化来演示);
1).注册监听
2).移出监听
3).金币发生变化的时候,通知每个界面
操作:
1.将Event三个脚本导入工程中;
2.写一个脚本,PlayerInforManagerTest,脚本主要作用是存储用户数据,其他脚本需要数据时就在这个脚本中调用,利用事件系统
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class PlayerInfoManagerTest { #region 单例模式
private static PlayerInfoManagerTest instance; public static PlayerInfoManagerTest Instance
{
get
{
if (instance == null)
{
instance = new PlayerInfoManagerTest();
}
return instance;
}
} private PlayerInfoManagerTest() { }
#endregion private int playerGold; public int PlayerGold { get { return playerGold; } set {
//之前玩家金币数值 != 设置过来的数值
if (playerGold != value)
{
playerGold = value;
//数值发生变化 通知注册当前 金币发生变化的 界面
EventDispatcher.TriggerEvent<int>(EventKey.OnPlayerGoldChange, playerGold); } }
} }
3).在事件系统的EventKey脚本中添加需要改变数据的Key
4).写一个脚本EventTest,作用是作为改变数据而调用事件系统,相当于一个商店购买(出售)装备时,金币减少(增加),通知玩家PlayerInforManagerTest数据中心更新数据,从而让其他(如玩家背包显示金币)脚本调用PlayerInforManagerTest时数据一致.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class EventTest : MonoBehaviour { public Text goldText; // Use this for initialization
void Start()
{
EventDispatcher.AddEventListener<int>(EventKey.OnPlayerGoldChange, OnPlayerGoldValueChange);
} void OnPlayerGoldValueChange(int gold)
{
goldText.text = gold.ToString();
} // Update is called once per frame
void Update() { }
private void OnDestroy()
{
EventDispatcher.RemoveEventListener<int>(EventKey.OnPlayerGoldChange, OnPlayerGoldValueChange); } public void OnClickToAddGold()
{
PlayerInfoManagerTest.Instance.PlayerGold += ;
}
}
5).在unity中添加button和金币Text文本,挂载脚本实现.