中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity的Animator組件的用法

發布時間:2021-09-03 21:31:22 來源:億速云 閱讀:507 作者:chen 欄目:開發技術

這篇文章主要講解了“Unity的Animator組件的用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Unity的Animator組件的用法”吧!

目錄
  • 一、前言

  • 二、Animator組件

  • 三、Animator Controller文件

  • 四、Animation Clip文件

  • 五、 狀態機的狀態(State)

    • 1、Any State狀態

    • 2、Entry狀態

    • 3、Exit狀態

  • 六、動畫狀態的屬性

    • 七、狀態間的過渡關系(Transitions)

      • 八、添加狀態控制參數

        • 九、編輯切換狀態的條件

          • 十、代碼中控制狀態

            • 十一、檢查動畫狀態

              • 方法1、AnimatorStateInfo

              • 方法2、繼承StateMachineBehaviour

            • 十二、控制播放速度

              • 十三、注意事項

                • 1 取消勾選

                • 2 動作循環。

                • 3.一般我們要的都是立即切換,所以這里 不要勾選

              • 十四、補充

                • 1、Mirror

                • 2、Solo與Mute

              一、前言

              Unity可以用兩種方式控制動畫
              1 Animation,這種方式簡單,直接 Play(“Idle”)或者CorssFade(“Idle”)就可以播放動畫;
              2 AnimatorUnity5.x之后推薦使用這種方式,因為里面可以加上混合動畫,讓動畫切換更加平滑。

              二、Animator組件

              你通過Animation窗口(快捷鍵是Ctrl+6)中的Create New Clip創建Animation時,一個 Animator已經悄無聲息地出現在了對應的GameObject

              Unity的Animator組件的用法

              三、Animator Controller文件

              在第一步中生成的Animator組件上, 第一個Controller參數在創建Animator時已經被賦值了,可以點擊該值,并切換到Project窗口下,會發現這個 Controller對應的文件是一個.controller文件。
              Animator Controller就是動畫控制器,負責在不同的動畫間切換,屬于制作動畫效果的必備原件。

              Unity的Animator組件的用法

              注意,你也可以通過GameObject上的 Add Component添加一個嶄新的 Animator組件,但是這種情況下 AnimatorController參數默認為空,所以需要我們手動將事先準備好的.controller文件拖拽到該參數位置,動畫控制器才能正常工作。

              四、Animation Clip文件

              雙擊 .controller"文件,會彈出一個 Animator窗口,該窗口中顯示的就是動畫控制器文件中的所有內容(也可以在頂部的工具欄通過 Window - Animator打開這個界面)

              Unity的Animator組件的用法

              Project窗口右鍵單擊,選擇Create->Animation創建Animation Clip.anim文件)

              Unity的Animator組件的用法

              Unity的Animator組件的用法

              再把.anim文件拖拽進Animator窗口,作為Animator Controller的一個狀態(State

              Unity的Animator組件的用法

              通過Animator創建出來的Animation Clip無法直接通過掛Animation組件進行播放,如果強行播放,Console會報一條警告信息:

              The AnimationClip 'XXX' used by the Animation component 'XXX' must be marked as Legacy.

              以及一條提示信息

              Default clip could not be found in attached animations list

              如下

              Unity的Animator組件的用法

              為什么呢?
              如果我們把Inspector切換為Debug模式

              Unity的Animator組件的用法

              可以看到Animation Clip有個Legacy勾選框

              Unity的Animator組件的用法

              Legacy是遺產的意思,也就是傳統的通過Animation組件來播放Animation Clip的做法,如果使用Animation組件來播放Animation Clip,則必須把Legacy勾選上,不過這種方式已經是過時的做法,推薦使用Animator來播放Animation Clip

              五、 狀態機的狀態(State)

              每個Animator Controller都會自帶三個狀態:Any State, EntryExit

              Unity的Animator組件的用法

              1、Any State狀態

              表示任意狀態的特殊狀態。例如我們如果希望角色在任何狀態下都有可能切換到死亡狀態,那么Any State就可以幫我們做到。當你發現某個狀態可以從任何狀態以相同的條件跳轉到時,那么你就可以用Any State來簡化過渡關系。

              2、Entry狀態

              表示狀態機的入口狀態。當我們為某個GameObject添加上Animator組件時,這個組件就會開始發揮它的作用。
              如果Animator Controller控制多個Animation的播放,那么默認情況下Animator組件會播放哪個動畫呢? 由Entry來決定的。
              但是Entry本身并不包含動畫,而是指向某個帶有動畫的狀態,并設置其為默認狀態。被設置為默認狀態的狀態會顯示為 橘黃色。

              Unity的Animator組件的用法

              當然,你可以隨時在任意一個狀態上通過 鼠標右鍵->Set as Layer Default State更改默認狀態。

              Unity的Animator組件的用法

              記住, EntryAnimator組件被激活后無條件 跳轉到默認狀態,并且每個Layer有且僅有一個默認狀態。

              3、Exit狀態

              表示狀態機的出口狀態,以紅色標識。如果你的動畫控制器只有一層,那么這個狀態可能并沒有什么卵用。但是當你需要從子狀態機中返回到上一層(Layer)時,把狀態指向Exit就可以了。

              Unity的Animator組件的用法

              六、動畫狀態的屬性

              我們可以選中某個自定義狀態,并在Inspector窗口下觀察它具有的屬性

              Unity的Animator組件的用法

              屬性名描述
              Motion狀態對應的動畫。每個狀態的基本屬性,直接選擇已定義好的動畫(Animation Clip)即可
              Speed動畫播放的速度。默認值為1,表示速度為原動畫的1.0倍。
              Mutiplier勾選右側的Parameter后可用,即在計算Speed的時考慮 區域1 中定義的某個參數。若選擇的參數為smooth, 則動畫播放速度的計算公式為 smooth * speed * fps(animation clip中指定)
              Mirror僅適用于humanoid animation(人型機動畫)
              Cycle Offset周期偏移,取值范圍為0-1.0,用于控制動畫起始的偏移量。把它和正弦函數的offset進行對比就能夠理解了,只會影響起始動畫的播放位置。
              Foot IK僅適用于humanoid animation(人型機動畫)
              Write Default最好保持默認,感興趣可以參考官方手冊
              Transitions該狀態向其他狀態發起的過渡列表,包含了Solo和Mute兩個參數,在預覽狀態機的效果時起作用
              Add Behaviour用于向狀態添加“行為”

              七、狀態間的過渡關系(Transitions)

              直觀上說它們就是連接不同狀態的有向箭頭

              Unity的Animator組件的用法

              要創建一個從狀態A狀態B的過渡,直接在狀態A上 鼠標右鍵 - Make Transition并把出現的箭頭拖拽到狀態B上點擊鼠標左邊即可。

              Unity的Animator組件的用法

              八、添加狀態控制參數

              參數有FloatIntBoolTrigger

              Unity的Animator組件的用法

              FloatInt用來控制一個動畫狀態的參數,比如速度方向等可以用數值量化的東西,
              Bool用來控制動畫狀態的轉變,比如從走路轉變到跑步,
              Trigger本質上也是bool類型,但它默認為false,且當程序設置為true后,它會自動變回false

              如下這里創建一個Int類型的參數AnimState

              Unity的Animator組件的用法

              九、編輯切換狀態的條件

              點擊連線,在Inspecter窗口中可以進行設置,在Conditions欄下可以添加條件,如下圖表示當參數
              AnimState0時會執行這個動畫Any StateNew Animation2的過渡

              必須在Parameters面板中添加了參數才可以在這里查看到,其次添加的條件為&&”與”關系,即必須同時滿足。

              Unity的Animator組件的用法

              十、代碼中控制狀態

              我們可以通過代碼來設置條件狀態,達到動畫切換的目的

              Animator ator = go1.GetComponent<Animator>();
              ator.SetInteger("AnimState", 0);

              上面的代碼,讓AnimState這個參數值為0,滿足了從Any StateNew Animation2的過渡條件,從而實現New Animation2動畫的過渡。

              十一、檢查動畫狀態

              方法1、AnimatorStateInfo

              在腳本中添加代碼

              //檢查是否正在播放jump動畫.
              AnimatorStateInfo stateinfo = anim.GetCurrentAnimatorStateInfo(0);   
              bool playingJump = stateinfo.IsName("jump");
              if(playingJump)
              {
              	if(stateinfo.normalizedTime < 1.0f)
              	{
              		//正在播放
              	}
              	else
              	{
              		//播放結束
              	}
              	
              }

              當處于狀態jump,則stateinfo.IsName("jump")返回true

              方法2、繼承StateMachineBehaviour

              Animator的每個狀態都可以掛載腳本,創建腳本,繼承于StateMachineBehaviour類,用于檢測狀態機中動畫切片(Anamation)的運行狀態。
              官方示例:https://docs.unity3d.com/ScriptReference/StateMachineBehaviour.html
              將腳本掛載在對應的狀態上即可。代碼如下

              using System.Collections;
              using System.Collections.Generic;
              using UnityEngine;
              public class JumpState : StateMachineBehaviour
              {
                  private GameObject player;
                  override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
                  {
                      // 正在played的狀態的第一幀被調用
                      Debug.Log("------OnStateEnter------------");
                  }
                  // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
                  override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
                  {        
                  }
                  // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
                  override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
                  {
                      // 轉換到另一個狀態的最后一幀 被調用
                      Debug.Log("-------------OnStateExit-----------------");
                  }
                  // OnStateMove is called right after Animator.OnAnimatorMove()
                  override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
                  {
                  	// 在OnAnimatorMove之前被調用 
                      
                  }
                  // OnStateIK is called right after Animator.OnAnimatorIK()
                  override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
                  {
                      // 在OnAnimatorIK之后調用,用于在播放狀態時的每一幀的monobehavior。
                      // 需要注意的是,OnStateIK只有在狀態位于具有IK pass的層上時才會被調用。
                      // 默認情況下,圖層沒有IK通道,所以這個函數不會被調用
                      // 關于IK的使用,可以看看這篇文章《Animator使用IK實現頭部及身體跟隨》
                      // https://www.jianshu.com/p/ae6d65563efa
                  }
              }

              十二、控制播放速度

              Animator ator = go1.GetComponent<Animator>();
              var stateinfo = ator.GetCurrentAnimatorStateInfo(0);
              if(stateinfo.IsName("Jump"))
              {
              	ator.speed = 2;
              }

              十三、注意事項

              1 取消勾選

              Can Transition To Self,不然動畫會出現抖動

              Unity的Animator組件的用法

              2 動作循環。

              不然如果沒有下個狀態切換,直接停止動作

              Unity的Animator組件的用法

              3.一般我們要的都是立即切換,所以這里 不要勾選

              Has Exit Time,如果勾選了,則表示在該動作完成后才允許切換,

              Unity的Animator組件的用法

              十四、補充

              1、Mirror

              鏡像,可以反轉當前動畫,減少動畫師工作量

              Unity的Animator組件的用法

              2、Solo與Mute

              Mute相當于把目標過渡禁用掉。Solo表示只生效這一條過渡
              可以多選,當選中后會出現箭頭提示
              條件滿足優先于Solo/Mute,當條件沒有滿足時依然不會過渡

              Unity的Animator組件的用法

              感謝各位的閱讀,以上就是“Unity的Animator組件的用法”的內容了,經過本文的學習后,相信大家對Unity的Animator組件的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

              向AI問一下細節

              免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

              AI

              连平县| 宁阳县| 金昌市| 抚松县| 绵竹市| 台中县| 论坛| 若羌县| 岚皋县| 西安市| 宝兴县| 神木县| 武邑县| 屏东县| 华阴市| 北票市| 碌曲县| 阳谷县| 肃宁县| 长白| 绥芬河市| 嘉定区| 甘孜| 澄江县| 江陵县| 黔西| 沭阳县| 沧源| 白城市| 甘泉县| 惠东县| 南丰县| 丘北县| 靖安县| 德昌县| 隆化县| 淅川县| 台山市| 攀枝花市| 阳泉市| 博野县|