關於UGUI實現UI動畫
問題描述:
我們在做遊戲的時候,如果揹包能動態的滑出,會有更好的體驗。
實現物體的隱藏和顯示,方法一可以用SetActice(true/false)的方式;方法二可以在物體需要隱藏的時候,放在可視範圍外面。(也可能有其他方法我不知道的 - -!)
對於UI這類需要經常使用物體的最好還是使用方法二實現。
解決方案:
下面就簡單總結一下如何實現UI的動態地隱藏和顯示。
先建立一個Image,如果你的場景中沒有Canvas,unity會自動幫你建立Canvas。
在Hierarchy中選中Image,選擇選單欄Window-Animation,點選Create按鈕建立第一個Animation Clip,同時Image上自動被掛上Animator元件;
開啟自動建立Animation Controller,看到剛剛建立的第一個Animation Clip與Entry自動連上了,意思就是當程式執行時,會首先執行該動畫。但是在遊戲裡,程式剛剛執行時,UI是不需要有任何操作的,故不對該動畫進行任何修改。
接下來,製作UI顯示和隱藏兩個動畫:新建兩個Animation,分別命名為Show和Hide;編輯Show動畫,點選AddProperty按鈕可以看到我們可以對Image進行修改的元件以及引數。
我們需要修改UI位置,故選擇RectTransform-AnchoredPosition;
關於如何給動畫新增關鍵幀等就不贅述了。
對關鍵幀進行位置的修改,一針設定在螢幕可視範圍外的位置,一針設定在螢幕可視範圍內的位置,unity就會自動生成曲線。
同理,也製作出UI隱藏時的動畫。
接下來回到AnimatorController的介面,設定觸發條件。
點選介面內的加號,新增一個bool變數來控制UI的顯示和隱藏。
選擇狀態間的連線,在Inspectors面板中,使用+號新增觸發條件。
在Show狀態到Hide狀態間選擇,bool變數為false時觸發;在Hide狀態到Show狀態間選擇,bool變數為true時觸發。
接下來給Image新增指令碼元件,控制該變數即可。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class UIPos : MonoBehaviour { private Animator animator; private bool isShow = false; void Awake() { animator = GetComponent<Animator>(); } void Update() { if (Input.GetMouseButtonDown(0)) { if (isShow == false) { isShow = true; animator.SetBool("isShow", true); } else { isShow = false; animator.SetBool("isShow", false); } } } }
總結:
Unity要學的東西太多,學習的過程中應該要注意舉一反三。比如今天學習的UI動畫製作,就應該發散思維如何實現UI從小到大的變化?如何改變UI滑出的曲線?如何用一個Button來控制UI的滑出?等等......
文章為個人學習總結,總結得不好的地方,請多多指教。