iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
0
自我挑戰組

深入淺出做中學Unity系列 第 2

Unity3D - Gif效果的進階應用

  • 分享至 

  • xImage
  •  

首先我們需要有動圖效果的物件,之前的文章中有做過,可以參考以下這篇Unity3D - 實現gif效果 ;接著就能開始進行進階應用了,首先,當你成功將一個gif效果實現以後,會想要再看到什麼變化呢?人的慾望是無窮的,所以當一個東西會動了以後當然會希望它可以"動得更多"!

於是乎我試著將有gif效果的物件實現位移、旋轉及變形的效果,使整體看起來像是個作品 ,照慣例雙手奉上程式碼,以下 :

C#

        public Vector3 rotationMin;
        public Vector3 rotationMax;

        public AnimationCurve curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);

        public float speed = 0.2f;
        public bool randomizeSpeed = false;

        public float maxSpeed = 1f;

        private float _speed = 0f;

首先宣告兩個物體旋轉的變數,分別是最大跟最小值,目的是讓物件的動畫效果是能被我們所控制的,畢竟只要一不小心失控了,在使用者眼裡就會覺得是Bug;再來則是宣告動畫曲線,這是為了要讓用程式碼寫的動畫效果不會死板板的從A點到B點,而是有線性移動的感覺;接著來宣告很重要的一個變數 - 速度,俗話說的好,沒有速度就沒有激情(誤),其實是因為沒有速度、加速度這類變數的話,那物體就不會有實際移動的效果啦~最後則是添加一個亂數生成速度的變數,這樣能使某些特定物體忽快忽慢,製造反差感,讓整體動態更加逼真且好看。

C#

protected void Awake()
        {
            _speed = speed;
            if (randomizeSpeed)
            {
                _speed = Random.Range(speed, maxSpeed);
            }
        }


        protected void Update()
        {
            var a = Vector3.Lerp(Vector3.zero, rotationMax - rotationMin, curve.Evaluate(Mathf.PingPong(Time.time * _speed, 1f)));
            a += rotationMin;
            
            transform.localRotation = Quaternion.Euler(a);
        }

再來就是亂數生成後的值用一個變數去裝起來,然後將宣告好的參數都丟到所寫的算式當中,一個蘿蔔一個坑的概念, 最後的最後, 加上一行讓物體自行旋轉的code。

https://ithelp.ithome.com.tw/upload/images/20200902/20130055BhMcOsNwWR.png
已上看到的效果全都是用同個方式去針對不同動話所需的型態去製作的唷~是不是充滿了速度與激情呢!


上一篇
Unity3D - 實現gif效果
下一篇
Unity3D -Animation動畫系統簡介
系列文
深入淺出做中學Unity9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言