Unity轻便响应式事件框架UniEvent

https://github.com/m969/uniFrame
基于UniRx的一个轻便的事件框架,提取自uFrame框架。

uFrame是一个专门为大型游戏项目设计的基于MVVM模式的代码框架,非常强大,但如果用于小游戏项目就会显得比较臃肿,没有必要,但我又想要用uFrame那一套便利的事件机制,因此我就把它提取出来形成了这个UniEvent。

使用方式:
在使用之前需要先引入UniRx命名空间。

订阅事件:

this.OnEvent().Subscribe(x => { });

发布事件:

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
{
    public HeroCmdType type;
    public GameObject Result { get;set; }
}

public class UniEventTest : MonoBehaviour {
    //可订阅属性
    public ReactiveProperty p = new ReactiveProperty();


    void Start () {
        //订阅属性
        p.Subscribe(x => { print("p=" + x); });
        //订阅Hero事件
        this.OnEvent().Subscribe(OnHeroEvent);
        //筛选Hero出生事件
        this.OnEvent().Where(e => e.type == HeroEventType.Spawn).Subscribe(OnHeroSpawn);
        //筛选Hero死亡事件
        this.OnEvent().Where(e => e.type == HeroEventType.Dead).Subscribe(OnHeroDead);
        //订阅Hero命令
        this.OnEvent().Subscribe(OnHeroCommand);

        //改变属性
        p.Value = 1;
        //发布Hero事件
        this.Publish(new HeroEvent());
        //发布Hero出生事件
        this.Publish(new HeroEvent() { type = HeroEventType.Spawn });
        //发布Hero死亡事件
        this.Publish(new HeroEvent() { type = HeroEventType.Dead });
        //发布Hero命令并携带返回值
        var result = this.Execute(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");
    }
}

你可能感兴趣的:(Unity轻便响应式事件框架UniEvent)