• 熱門專題

Unity基於響應式編程(Reactive programming)入門

作者_落跑甜心陈翔吻戏:伊利丹·怒風  發布日期|-青岛地下排水系统:2016-11-30 20:23:49
Tag標簽|_-艺术人生周润发:Unity基於響應式編程(Reactive  programming)入門  
  •  

    背景

    前有慕容小匹夫的一篇《解構C#遊戲框架uFrame兼談遊戲架構設計》_-万兽之国(h)人蛇,引用文中內容

    uFrame是提供給3D開發者使用的一個框架插件-__吸血白蝙蝠卫生巾,它本身模仿了MVVM這種架構模式(事實上並不包含Model部分-郑浩南三级,且多出了Controller部分)---政治局常委人数。因為用於Unity3D|_家禾康甩脂机有用吗,所以它向開發者提供了一套基於Editor的可視化編輯工具__-众彩彩票,可以用來管理代碼結構等_|132彩票com苹果版。需要指出的是它的一個重要的理念|-|306定投,同時也是軟件工程中的一個重要理念就是關注分離(Separation of concern||_五百次回眸,SoC)_||南安市委书记。uFrame借助控製反轉(IoC)/依賴注入(DI)實現了這種分離__|步步高i508手机游戏下载,從而進一步實現了MVVM這種模式__求佛临淄方言版。且在1.5版本之後__诺基亚6120c软件下载,引入了UniRx庫||000712锦龙股份,引進了響應式編程的思想__fm2010 战术。

    讀起來高大上-||苏岑博客,本文主要想從實際出發|_群主被砍死,著手最後一句“且在1.5版本之後|_-斯文富豪,引入了UniRx庫_||若风退役仪式视频,引進了響應式編程的思想_|-盈利国际APP下载。”-银河战士融合金手指,在Unity中如何使用響應式編程|-求购小龙虾,如何使用UniRx庫-||黄梁txt。

    當然一下列出這麼多新概念性的東西||-格里昂酒店管理学院,作為新手必然理解起來有困難的||_云顶彩票,當然我也希望你是天賦迥異的人_|习水教育科技网。這裏列出幾點-|-陈丽华前夫离婚原因,如果你不了解高中生炒股赚4 5亿,請自行去學習或者複習--台湾身份证号生成器,回來在看也不遲|-_雅煊。

    1_盈彩网是真的吗、Linq基礎-云顶娱乐送3元金币下载,Linq的本質及與傳統命令式編程的區別和優點

    2|_青岛八度空间纹身、聲明式編程和命令式編程的概念和區別

    3-|_篱笆墙外百度影音、什麼是響應式編程

    4_-公顷换算、什麼是觀察者模式

    5|_-脱狱之王第二季、軟件編程中Stream的概念

    好了裝b時間過去了__mellow高敏爱,讓我們簡單的說下什麼是響應式編程-|我要的是无话不说。這裏也不廢話|陈瑞围棋道场,引用一段-|北京市市委书记,看的懂得自然明白__白岩松被开除党籍,不懂得還是不明白

    什麼是反應式編程-|九五至尊香烟价格:反應式編程(Reactive programming)簡稱Rx|_获奖身份证号码,他是一個使用LINQ風格編寫基於觀察者模式的異步編程模型_长春盗车。簡單點說Rx = Observables + LINQ + Schedulers-_2628彩票平台登录链接。

    這裏為什麼要在遊戲開發中引入響應式編程Rx,答案是遊戲特別適合RX編程||与狼共舞oa,因為在遊戲中廣泛應用了時間(幀)和事件(UI)的概念__9岁女孩疑遭家暴,時間本身是一種流__够多网,而事件也是基於時間的一種信號(並不是特別準確-__雪一片一片是什么歌,意會)-_竹蒂,而這正是RX所擅長的||众彩平台骗局。

    600216-20151118151734936-2055036453

    實現

    本文以係列文章中的精靈鼠標移動和序列幀動畫為基礎|我的家乡作文600字,沒有基礎的先參考下傳統實現方式一下兩篇文章

    時光煮雨 Unity3D實現2D人物動畫① UGUI&Native2D序列幀動畫

    時光煮雨 Unity3D實現2D人物動畫② Unity2D 動畫係統&資源效率

    這裏引入了UniRx庫-||诺基亚3110c游戏,來實現基於響應式編程及聲明式編程代碼重構--流动人口信息,代碼如下|-阿姆斯特丹机场购物:

    using UnityEngine;
    using UniRx;

    public class PlayerController : MonoBehaviour
    {
        public float speed;
        private Vector3 moveDirection;

        private int currentTexture = 0;
        public Sprite[] textureArray;
        // Use this for initialization
        void Start()
        {
            //鼠標控製移動_易中彩票平台可靠吗,每幀更新
            Observable.EveryUpdate()
             .Subscribe(_ =>
             {
                 //1--|雷神2豆瓣、獲得當前位置
                 Vector3 curenPosition = this.transform.position;
                 //2-_青龙寺遗址公园、獲得方向
                 if (Input.GetButton('Fire1'))
                 {
                     Vector3 moveToward = Camera.main.ScreenToWorldPoint(Input.mousePosition);

                     moveDirection = moveToward - curenPosition;
                     moveDirection.z = 0;
                     moveDirection.Normalize();
                 }
                 //3|2019香港赛马比赛、插值移動
                 Vector3 target = moveDirection * speed + curenPosition;
                 transform.position = Vector3.Lerp(curenPosition, target, Time.deltaTime);
             });

            //幀動畫
            SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
            //定時器每隔5幀
            Observable.IntervalFrame(5).Subscribe(_ =>
            {
                currentTexture++;
                if (currentTexture >= textureArray.Length)
                {
                    currentTexture = 0;
                }
                spriteRenderer.sprite = textureArray[currentTexture];
            });
        }

    }
    是的沒有看錯___快手封号名单300人,你沒有發現熟悉的Update函數---感人的电影推荐,如果說以上函數讓你看到就是把所有代碼就放在了Start裏麵而已_yy44800,我們再重構一下代碼|天津友谊商厦,使用提取方法--_雅安芦山县委书记,看看效果_|桃江二手房,這就是聲明式編程的魅力_-诺基亚翻盖手机大全,程序可讀性增強|卡其色衬衫,更適合人類的思維方式

    using UnityEngine;
    using UniRx;

    public class PlayerController : MonoBehaviour
    {
        public float speed;
        private Vector3 moveDirection;

        private int currentTexture = 0;
        public Sprite[] textureArray;
        // Use this for initialization
        void Start()
        {
            //鼠標控製移動-|阿龙山吧,每幀更新
            PlayerMove();

            //角色 幀動畫
            PlayerAnimation();
        }

        /// <summary>
        /// 角色 幀動畫控製
        /// </summary>
        private void PlayerAnimation()
        {
            SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
            //定時器每隔5幀
            Observable.IntervalFrame(5).Subscribe(_ =>
            {
                currentTexture++;
                if (currentTexture >= textureArray.Length)
                {
                    currentTexture = 0;
                }
                spriteRenderer.sprite = textureArray[currentTexture];
            });
        }

        /// <summary>
        /// 鼠標控製移動||苍井空快播种子,每幀更新
        /// </summary>
        private void PlayerMove()
        {
            Observable.EveryUpdate()
                .Subscribe(_ =>
                {
                    //1_|2019六开彩香港开奖结果、獲得當前位置
                    Vector3 curenPosition = this.transform.position;
                    //2_|_陈翔卡通图片、獲得方向
                    if (Input.GetButton('Fire1'))
                    {
                        Vector3 moveToward = Camera.main.ScreenToWorldPoint(Input.mousePosition);

                        moveDirection = moveToward - curenPosition;
                        moveDirection.z = 0;
                        moveDirection.Normalize();
                    }
                    //3_-心跳宝贝之青涩回忆、插值移動
                    Vector3 target = moveDirection*speed + curenPosition;
                    transform.position = Vector3.Lerp(curenPosition, target, Time.deltaTime);
                });
        }
    }

    總結

    這裏記住UniRx兩個方法 Observable.EveryUpdate|__致富彩骗局,Observable.IntervalFrame(這裏還記得以前文章裏提的定時器嗎--长官爱人19楼,這個定時器怎麼樣簡單吧)|_腾讯公司有抽奖活动吗,還有ObservableWWW.GetWWW(上一篇的一個異步加載資源的函數)||青银高速公路地图,采用聲明式編程的方式-|-078彩票包赔本金是真的吗,看看函數名就知道是幹什麼的了吧-|崆峒二手房网,還用看文檔或者解釋什麼嗎|-苏州园区三中?

    文章內容比較簡單-锈水财阀,實現的功能也簡單-_|雷克萨斯ex350,函數也簡單|_|陈德荣任天津市委常委,希望你們喜歡_-360双色球预测媒体安全。

延伸閱讀|-:

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯係方式
本站內容來自於互聯網,僅供用於網絡技術學習,學習中請遵循相關法律法規
快乐时时彩大众彩票分分彩票荣鼎彩票全民彩票众赢彩票

免责声明: 本站资料及图片来源互联网文章,本网不承担任何由内容信息所引起的争议和法律责任。所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!