1. 程式人生 > >關於UGUI實現UI動畫

關於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的滑出?等等......

文章為個人學習總結,總結得不好的地方,請多多指教。