美文网首页
Unity轻便响应式事件框架UniEvent

Unity轻便响应式事件框架UniEvent

作者: m969 | 来源:发表于2019-02-02 23:11 被阅读0次

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

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

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

订阅事件:

this.OnEvent<TEvent>().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<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;
        //发布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<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");
    }
}

相关文章

网友评论

      本文标题:Unity轻便响应式事件框架UniEvent

      本文链接:https://www.haomeiwen.com/subject/npeesqtx.html