https://github.com/m969/uniFrame
基于UniRx的一個輕便的事件框架情连,提取自uFrame框架蛔外。
uFrame是一個專門為大型游戲項目設(shè)計的基于MVVM模式的代碼框架冀值,非常強大姆怪,但如果用于小游戲項目就會顯得比較臃腫嘿辟,沒有必要舆瘪,但我又想要用uFrame那一套便利的事件機制,因此我就把它提取出來形成了這個UniEvent红伦。
使用方式:
在使用之前需要先引入UniRx命名空間英古。
訂閱事件:
this.OnEvent<TEvent>().Subscribe(x => { });
發(fā)布事件:
this.Pubish(new TEvent());
示例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
public enum HeroEventType
{
None,
Spawn,
Dead
}
public class HeroEvent
{
public HeroEventType type;
public string eventType;
public string testStr;
}
public enum HeroCmdType
{
None,
Attack,
BeAttacked
}
public class HeroCommand : ICommand<GameObject>
{
public HeroCmdType type;
public GameObject Result { get;set; }
}
public class UniEventTest : MonoBehaviour {
//可訂閱屬性
public ReactiveProperty<int> p = new ReactiveProperty<int>();
void Start () {
//訂閱屬性
p.Subscribe(x => { print("p=" + x); });
//訂閱Hero事件
this.OnEvent<HeroEvent>().Subscribe(OnHeroEvent);
//篩選Hero出生事件
this.OnEvent<HeroEvent>().Where(e => e.type == HeroEventType.Spawn).Subscribe(OnHeroSpawn);
//篩選Hero死亡事件
this.OnEvent<HeroEvent>().Where(e => e.type == HeroEventType.Dead).Subscribe(OnHeroDead);
//訂閱Hero命令
this.OnEvent<HeroCommand>().Subscribe(OnHeroCommand);
//改變屬性
p.Value = 1;
//發(fā)布Hero事件
this.Publish(new HeroEvent());
//發(fā)布Hero出生事件
this.Publish(new HeroEvent() { type = HeroEventType.Spawn });
//發(fā)布Hero死亡事件
this.Publish(new HeroEvent() { type = HeroEventType.Dead });
//發(fā)布Hero命令并攜帶返回值
var result = this.Execute<HeroCommand, GameObject>(new HeroCommand() { type = HeroCmdType.Attack });
print(result);
}
private void OnHeroEvent(HeroEvent evt)
{
print("OnHeroEvent");
}
private void OnHeroSpawn(HeroEvent evt)
{
print("OnHeroSpawn");
}
private void OnHeroDead(HeroEvent evt)
{
print("OnHeroDead");
}
private void OnHeroCommand(HeroCommand evt)
{
print("OnHeroCommand " + evt.type);
evt.Result = new GameObject(evt.type + "Result");
}
}