源码在最后放上
应用场景: 进入游戏开始计时
顺序逻辑: 进入场景发出View层事件 -》 View的Mediator接收 -》调用View触发-》发出结束事件
1.进入场景发出View层事件
IEnumerator StartCount()
{
yield return new WaitForSeconds(0f);
dispatcher.Dispatch(ViewEventType.StartCount);
}
2. View的Mediator接收
public class Mediator_CountDown : EventMediator {
[Inject]
public View_CountDown View_CountDown { get; set; }
//监听
public override void OnRegister()
{
View_CountDown.Init();
dispatcher.AddListener(ViewEventType.StartCount, OnStartCount);
}
public void OnDestroy()
{
dispatcher.RemoveListener(ViewEventType.StartCount, OnStartCount);
}
//开始计时
void OnStartCount()
{
StartCoroutine(StartCount());
}
IEnumerator StartCount()
{
int Count = 1;
while(Count < 4)
{
View_CountDown.SetCount(Count-1);
Count++;
yield return new WaitForSeconds(0.1f);
}
//发出结束事件
dispatcher.Dispatch(EventType.StartCountComplete);
UIManager.Instance.CloseUI(UIPanelType.CountDownPanel);
}
}
3.调用View触发
public class View_CountDown : View {
public GameObject Fire;
public Image Count;
public Sprite[] CountSprites;
public void Init()
{
Fire = transform.Find("Fire").gameObject;
Count = transform.Find("Count").GetComponent<Image>();
}
//UI处理
public void SetCount(int i)
{
Count.sprite = CountSprites[i];
}
public void RotateFire(int speed)
{
Fire.transform.localEulerAngles = new Vector3(Fire.transform.localEulerAngles.x, Fire.transform.localEulerAngles.y, Fire.transform.localEulerAngles.z + speed);
}
}