美文网首页
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