Unity動畫機制 Animator與Animator Controller教程


Unity動畫機制Animator


本文提供全流程,中文翻譯。

Chinar 堅持將簡單的生活方式,帶給世人!

(擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例)


Chinar —— 心分享、心創新!

助力快速完成 Animator 動畫的添加與控制

為新手節省寶貴的時間,避免采坑!


Chinar 教程效果:
這里寫圖片描述



全文高清圖片,點擊即可放大觀看 (很多人竟然不知道)


1

Animator —— 動畫


Unity 中為我們提供了而全面的動畫設計解決方案,用來完成游戲對象的動態效果的控制和創建

我們想要一個人物模型動起來,非常簡單

只需要在人物的游戲對象上添加 Animator 組件

然后創建一個 Animator Controller 來控制對應的游戲對象的動畫 Animator 即可
舉個栗子黑白88
這里寫圖片描述
這里寫圖片描述


2

Animator Controller —— 動畫控制器面板


選中 Animator Controller文件,點擊 Open 即可打開控制器面板

新創建一個 Animator Controller 默認是沒有任何狀態的

需要自己創建空狀態,並進行相應設置
舉個栗子黑白88
這里寫圖片描述


3

Specifies Animation —— 指定動畫


創建一個狀態后,我們需要給該狀態改名(為了區分狀態),並指定一個動作 Motion

這里我創建的是 站立,所以就需要找到對應的 Idel 動畫,指定給 Motion
舉個栗子黑白88
這里寫圖片描述
相同流程創建跑步動作:
這里寫圖片描述


4

Status Swithing —— 狀態切換


由於喪屍這個游戲對象,具備跑和站立 2 個狀態/動作 Motion

我們需要的是點擊鼠標,它就開始移動,保持跑起來的狀態

走到目的地,它就停下,保持站立狀態

所以這里 站立——跑,狀態是需要切換的,如上圖,我們可以簡單的建立連接

那么我們需要添加一個 bool 參數,並設置對應條件,來使2個狀態可以進行切換

添加完成后,我們就可以通過代碼,來控制人物的站立和跑 2個狀態了
舉個栗子黑白88
這里寫圖片描述
具體流程:
這里寫圖片描述


5

Code Control —— 通過代碼控制狀態


完成上邊所有設置,即可通過代碼控制 動畫狀態的切換

調用 Animator 中的函數,通過設置 bool 值,即可改變 游戲對象的 動畫狀態

animator.SetBool("ZombieRun", true) 讓僵屍切換為 跑 狀態

animator.SetBool("ZombieRun", false) 讓僵屍切換為 站立 狀態

Animator.StringToHash("ZombieRun")可以將字符參數轉為 ID(int 值) ,同樣用來控制狀態
舉個栗子黑白88

using UnityEngine;
using UnityEngine.AI;


/// <summary>
/// <para>作用:控制喪屍的移動</para>
/// <para>作者:Chinar</para>
/// <para>創建日期:2018-08-05</para>
/// </summary>
public class ZombieMove : MonoBehaviour
{
    private NavMeshAgent navMeshAgent;
    private Animator     animator;


    /// <summary>
    /// 初始化函數
    /// </summary>
    void Start()
    {
        navMeshAgent = GetComponent<NavMeshAgent>(); //獲取自身AI組件
        animator     = GetComponent<Animator>();     //動畫組件
    }


    /// <summary>
    /// 每幀刷新
    /// </summary>
    void Update()
    {
        if (Input.GetMouseButton(1)) //右鍵
        {
            object     ray = Camera.main.ScreenPointToRay(Input.mousePosition); //屏幕坐標轉射線
            RaycastHit hit;                                                     //射線投射碰撞
            bool       isHit = Physics.Raycast((Ray) ray, out hit);             //射線投射(射線,結構體信息) ;返回bool 值 是否檢測到碰撞
            if (isHit)
            {
                print("坐標:" + hit.point);               //射線與物體碰撞點
                navMeshAgent.SetDestination(hit.point); //AI組件,設置目的地/終點
                animator.SetBool("ZombieRun", true);    //讓僵屍跑起來
            }
        }
        if (navMeshAgent.remainingDistance < 0.5f) //當前位置 與終點 的 剩余距離<0.5f
        {
            animator.SetBool("ZombieRun", false); //讓僵屍站立
        }
    }
}

動畫效果:
這里寫圖片描述


支持

May Be —— 搞開發,總有一天要做的事!


擁有自己的服務器,無需再找攻略!

Chinar 提供一站式教程,閉眼式創建!

為新手節省寶貴時間,避免采坑!


先點擊領取 —— 阿里全產品優惠券 (享受最低優惠)


1 —— 雲服務器超全購買流程 (新手必備!)

2 —— 阿里ECS雲服務器自定義配置 - 購買教程(新手必備!)

3—— Windows 服務器配置、運行、建站一條龍 !

4 —— Linux 服務器配置、運行、建站一條龍 !





技術交流群:806091680 ! Chinar 歡迎你的加入


END

本博客為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究

對於需要復制、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯系,留言,Email: ichinar@icloud.com

對於經本博主明確授權和許可使用文章及內容的,使用時請注明文章或內容出處並注明網址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM