2017-08-29 40 views
0

這些國家和動畫不是我自己的。玩動畫師狀態和/或玩AnimationClip有什麼區別?爲什麼我不能播放動畫片段?

我有一個角色的動畫製作組件附加到它的預製。層次結構中的角色具有一些狀態和混合的動畫師,並且還有一些動畫片段。

現在,當我玩/運行一個動畫師的狀態是,這意味着我正在播放動畫?或者動畫片段是另一回事?

爲什麼我不能播放動畫片段?我沒有得到錯誤或例外,它只是不玩它。

這是一個附加到這個角色的腳本,我還爲這個角色添加了一個Animation組件。所以現在這個角色對象同時擁有Animator和Animation組件。

using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using UnityEngine; 

public class SwitchAnimations : MonoBehaviour 
{ 
    private Animator animator; 
    private int index = 0; 
    private static UnityEditor.Animations.AnimatorController controller; 
    private UnityEditor.Animations.AnimatorState[] an; 

    // Use this for initialization 
    void Start() 
    { 
     animator = GetComponent<Animator>(); 
     an = GetStateNames(animator); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.A)) 
     { 
      animator.Play(an[index].name); 
      if (++index == an.Length) 
       index = 0; 
     } 
    } 

    private static UnityEditor.Animations.AnimatorState[] GetStateNames(Animator animator) 
    { 
     controller = animator ? animator.runtimeAnimatorController as UnityEditor.Animations.AnimatorController : null; 
     return controller == null ? null : controller.layers.SelectMany(l => l.stateMachine.states).Select(s => s.state).ToArray(); 
    } 

    private void RollSound() 
    { 

    } 

    private void CantRotate() 
    { 

    } 

    private void EndRoll() 
    { 

    } 

    private void EndPickup() 
    { 

    } 
} 

變量內的有9個州:

Aiming 
Death_A 
Use 
Grounded 
Roll 
PickupObject 
Reload_Rifle 
Shoot_Rifle 
Empty 

當我上的按鍵我每次點擊一個一切正常單擊它的演奏狀態逐一我可以玩點擊A上的9個狀態。

我不明白與國家是在編輯器內,當我在層次結構中選擇字符,並在菜單中使:Window> Animator我看到9個州腿層:

9 States

不過,如果我點擊狀態接地雙擊我看到了一個混合樹,我不知道這是還規定或者也許這是動畫片段?那我怎樣才能訪問它們?

Blend Tree

確定這是一個部分我還不知道有關的動畫,什麼,以及如何我可以用它玩。

第二部分與AnimationClip/s有關,爲什麼我不能播放它們?

的動畫短片的腳本:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using UnityEditor; 
using UnityEditor.Animations; 
using UnityEngine; 

public class SwitchAnimations : MonoBehaviour 
{ 
    private Animation animation; 
    private AnimationClip[] animationClips; 

    // Use this for initialization 
    void Start() 
    { 
     animation = GetComponent<Animation>(); 
     animationClips = AnimationUtility.GetAnimationClips(gameObject); 

     foreach (AnimationClip clip in animationClips) 
     { 
      animation.AddClip(clip, clip.name); 
     } 
    } 
    // Update is called once per frame 
    void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.A)) 
     { 
      animation.clip = animationClips[6]; 
      animation.Play(animationClips[6].name); 
     } 
    } 

    private void RollSound() 
    { 

    } 

    private void CantRotate() 
    { 

    } 

    private void EndRoll() 
    { 

    } 

    private void EndPickup() 
    { 

    } 

    private void FootStep() 
    { 

    } 
} 

,由可變animationClips我有9個動畫:

Rifle_Aiming_Idle 
Rifle_Aiming_Walk_F_RM 
Rifle_Aiming_Walk_B_RM 
Rifle_Aiming_Walk_L_RM 
Rifle_Aiming_Walk_R_RM 
Rifle_Idle 
Rifle_Walk_F_RM 
Rifle_Run_F_RM 
Rifle_Sprint_F_RM 

當我運行遊戲並點擊一個這個時候,我在看Inspector中的Animation組件包含所有的動畫片段,而在Animation中,我看到要播放的動畫片段。

我沒有得到任何錯誤或例外,但它只是沒有玩它。角色保持閒置。即使我選擇另一個動畫片段索引播放5或3或1,也沒有播放。

我想知道爲什麼當我點擊A時它不會播放動畫。在這種情況下,列表中的動畫編號爲6,但仍未播放。

Animations in inspector

回答

1

動畫元件是一個傳統的組成部分,保持團結,以確保與舊項目向後兼容,所以你不應該使用它的動畫。

基本上,該系統的工作原理是這樣的:

所有的
  • 首先,你需要一個Animator Controller資產。這個動畫師是一個有限狀態機(有子狀態等),並且每個狀態都可以有一個Animation Clip(您可以通過字段中的via Inspector腳本來指定它)。當FSM進入特定狀態時,它將播放Animation Clip分配的狀態。 顯然Animator,爲了被遊戲對象使用,必須通過Animator組件分配給該對象。正如我之前所說的那樣,它們不會被指定爲遊戲對象的組件,而是它們必須被Animator引用才能播放。

  • 混合樹用於通過使用線性插值以無縫方式混合不同的動畫。它們是Animator的「特殊」狀態,它具有多個動畫片段,您可以插入它們以顯示從一個狀態到另一個狀態的轉換,例如,當您需要在正向運行,向左運行和向右運行之間更改動畫時。

的說法是非常廣闊的,你可以通過閱讀有關動畫製作,動畫片段官方文檔開始進入它這裏混合樹:

https://docs.unity3d.com/Manual/AnimationSection.html

+0

我要讀它。但只是爲了看看我是否能夠理解它:如果我想要播放這些動畫片段中的一個,我需要在動畫器中創建一個新狀態,然後將動畫片段添加到此狀態,然後在播放狀態時播放動畫。 (就像我現在玩的狀態,它的工作,但我需要添加動畫剪輯/一個狀態,所以我可以玩它)。 –

+1

是的,就是這樣。 「動畫師控制器」包含的國家(可能)包含一個「動畫片段」(或更多,如果該州是一個混合樹)。 – Galandil

+0

非常感謝你。 –

相關問題