• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            今天我給大家講一下如何使用NGUI做序列幀動畫。本節主要包括兩方面內容,分別是使用UIspirit和使用UITexture 做序列幀動畫。廢話不說了,下面開始。
            還要在啰嗦一句,首先大家要準備一些序列幀的素材圖片,最好是大圖和小圖各一套。我們先來將使用UISpirit做序列幀動畫,這個方法只適合使用小圖。
            在使用UISpirit 之前大家還要把準備好的序列幀圖片做成Atlas,如何做Atlas,大家可以參考系列教程四,這里就不多說了。建好自己的Atlas之后就可以開始著手做了。廢話終于完了。

            1. 老規矩,新建一個場景,新建一個2D UI ,在Panel節點下新建一個UISpirit,圖片選擇序列幀的第一幀圖片。

            2.如何讓Spirit動態換圖片,是我們要解決的重要問題。只要UIspirit能夠根據時間動態的換圖片就可以做到播放序列幀動畫。其實很簡單,最重 要的就是UISpirit的Name屬性。我們只要能夠動態改變UISpirit的SpiritName,就可以實現動態換圖的功能。
            代碼如下

            public bool ActivateWait = false;

                float fireRate = 0.2f;
                int i = 0;
                float nextFire;
                string[] ActivatorTexture = new string[] { "activity00", "activity01", "activity02", "activity03", "activity04", "activity05", "activity06", "activity07", "activity08", "activity09", "activity10", "activity11" };            //這里存放我們需要調用的序列幀的名稱,這種方法比較笨拙,
            //只適合使用圖片較少的情況,當圖片很多的情況下,我們可以使用代碼控制名稱,思路是前面的名稱一樣,后面的名稱代表序列幀編號,我們只要
            //在代碼中根據編號加上前綴名稱就可以得到所需序列幀的全名。具體使用參見下面的Texture序列幀動畫。
                void Awake()
                {
                    this.GetComponent<UISprite>().enabled = false;
                }

                // Use this for initialization
                void Start()
                {

                }

                // Update is called once per frame
                void Update()
                {
                    if (ActivateWait)
                    {
                        this.GetComponent<UISprite>().enabled = true;
                        if (i < ActivatorTexture.Length)
                        {
                            if (Time.time > nextFire)
                            {
                                nextFire = Time.time + fireRate;
                                 this.GetComponent<UISprite>().spriteName= ActivatorTexture;
                                i++;
                            }
                        }
                        else
                        {
                            i = 0;
                        }
                    }
                    else
                    {
                        this.GetComponent<UISprite>().enabled = false;
                    }
                }

            這里重要的代碼其實就只有一句 this.GetComponent<UISprite>().spriteName= ActivatorTexture; 根據i的索引,動態的改變Spirit的名稱。
            其余的是控制播放序列幀的節奏和是否播放序列幀。如圖是我使用此方法做的等待的進度條效果。

            3.第二種方法,使用UITexture做序列幀動畫。新建一個UITexture,拖放需要做動畫的序列幀的第一幀到Texture槽中,關于它的參 數,在以前的系列教程中都已經解釋的很清楚了,大家可以參考以前的教程。使用UITexture做序列幀動畫的關鍵在于動態改變它的Texture。關鍵 代碼:UITexture.mainTexture 。

            這里說明一點就是使用該方法做序列幀動畫之前,需要把所有的序列幀圖片放到Resources目錄下。我們在運行的時候動態調用需要的Texture。還 有一點需要注意的是,當圖片很多的時候,我們還需要動態卸載已經加載的圖片資源,避免擠爆內存。使用的方法是 : Resources.UnloadUnusedAssets();

            4.有了上面的知識之后,我們就可以動手寫出下面的代碼了:

            void DynamicLoadUnload(int curframe )
                {
                    //plane.renderer.material.mainTexture=ani[currentFrame];
                    if (curframe < 10)    //這里判斷當前幀
                    {
                        TextureUI.mainTexture = (Texture2D)Resources.Load(SequenceName_Gewei + curframe.ToString(), typeof(Texture2D));
            //SequenceName_Gewei 是指序列幀的名稱去掉各位數字的名稱,比如全名為Texture00,那么這里的參數應該是Texture0。下面還有十位百位,
            //依次類推。這里是根據名稱加幀索引,獲取全名的。
                    }
                    else if (curframe >= 10 && curframe < 100)
                    {
                        if (curframe % 50 == 0)
                            Resources.UnloadUnusedAssets();

                        TextureUI.mainTexture = (Texture2D)Resources.Load(SequenceName_Shiwei + curframe.ToString(), typeof(Texture2D));
                    }
                    else
                    {
                        if (curframe % 50 == 0)
                            Resources.UnloadUnusedAssets();

                        TextureUI.mainTexture = (Texture2D)Resources.Load(SequenceName_Baiwei + curframe.ToString(), typeof(Texture2D));
                    }
                }

            需要大家跟著自己動手做,自己學,授之以魚不如授之以漁。大家可以試著自己結合上面的UISpirit的方法先自己寫一下看看。這樣可以讓大家根據學習內容多思考,自己寫出的東西才能記得牢固。不要只簡單的從網上下載現成的代碼用,這樣對學習沒好處。

            聲明: 本文由( zqcyou )原創編譯,轉載請保留鏈接: NGUI系列教程六(序列幀動畫)

            久久精品国产2020| 久久久久亚洲AV无码去区首| 精品国产91久久久久久久a| 久久久久久A亚洲欧洲AV冫| 亚洲中文字幕无码久久综合网| 日韩乱码人妻无码中文字幕久久| 99久久国产综合精品网成人影院| 免费精品久久天干天干| A级毛片无码久久精品免费| 欧美噜噜久久久XXX| 亚洲精品高清久久| 一级做a爰片久久毛片免费陪| 99久久99久久| 久久天天躁狠狠躁夜夜不卡 | 97久久精品午夜一区二区| 国产精品亚洲综合专区片高清久久久| 日本精品久久久久影院日本| www.久久热.com| 久久九九兔免费精品6| 久久精品国产99国产电影网 | 久久久久人妻精品一区| 性做久久久久久久| 青青草原精品99久久精品66| 久久精品国产一区二区电影| 91精品国产色综合久久| 久久精品国产亚洲AV久| 亚洲国产成人久久一区WWW| 成人国内精品久久久久影院VR| 久久精品国产久精国产一老狼| 久久er国产精品免费观看8| 成人免费网站久久久| 亚洲国产精品无码久久SM| 久久人人爽人人爽人人片AV麻烦 | 亚洲欧美日韩精品久久亚洲区| 欧美一区二区精品久久| 国产精品狼人久久久久影院| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 亚洲AⅤ优女AV综合久久久| 久久久久亚洲?V成人无码| 久久久久亚洲AV无码专区网站| 品成人欧美大片久久国产欧美|