2017-08-29 57 views
0

私の状態やアニメーションは自分ではありません。Animator Stateの再生とAnimationClipの再生の違いは何ですか?なぜアニメーションクリップを再生できないのですか?

アニメータコンポーネントが添付されたキャラクタのプレハブがあります。階層内のキャラクタには、状態とブレンドを持つAnimatorがあり、アニメーションクリップもいくつかあります。

アニメーターの状態を再生/実行すると、アニメーションを再生しているという意味ですか?または、アニメーションクリップが別のものですか?

なぜアニメーションクリップを再生できないのですか?エラーや例外が発生しているわけではありません。

ここには、この文字に付けられたスクリプトがあります。この文字には、アニメーションコンポーネントも追加されています。キャラクターオブジェクトにはAnimatorとAnimationの両方のコンポーネントがあります。私はそれを一つの状態を1つずつ再生して、キーの上に正常に動作している私はすべてをクリックするたびに、クリックすると

Aiming 
Death_A 
Use 
Grounded 
Roll 
PickupObject 
Reload_Rifle 
Shoot_Rifle 
Empty 

私は再生することができます:変数インサイド

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つの状態があります文脈を選択して階層内にいるときにエディタの中にあるのはどういうことですか?Window> Animator私は9つの状態を見ることができます。 LegsLayer:

9 States

しかし、私は状態をクリックしてダブルクリックするとブレンドツリーが表示され、これも状態であるのか、それともアニメーションクリップであるのか分かりませんか?では、どうすればそれらにアクセスできますか?

Blend Tree

[OK]をこれは私がアニメーターと何をどのように私はそれで遊ぶことができますについてはまだ理解していない一部です。

2番目の部分は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() 
    { 

    } 
} 

と私は9つのアニメーション持つ変数animationClipsで::私はで見るこの時点でゲームやクリックを実行している場合は

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 

をアニメーションクリップの

スクリプトアニメーションコンポーネント内のインスペクタはすべてアニメーションクリップになり、アニメーションではアニメーションクリップが再生されます。

エラーや例外は発生しませんが、再生していないだけです。キャラクターはまだアイドルのままです。私が5または3または1を再生する別のアニメーションクリップインデックスを選択したとしても、何も再生されていません。

なぜ私はAをクリックしたときにアニメーションを再生していないのだろうか?この例ではリストからアニメーション番号6が再生されていない。

Animations in inspector

答えて

1

アニメーションコンポーネントは、従来のコンポーネントである、あなたはアニメーションのためにそれを使うべきではありませんので、古いプロジェクトとの下位互換性を確保するために、ユニティに保管。

は基本的に、システムがこのように動作します:

  • まず第一に、あなたはAnimator Controller資産を必要としています。このAnimatorは有限状態機械(サブ状態など)であり、各状態はAnimation Clip(これはMotionフィールドのInspectorを介してスクリプトに割り当てられます)。 FSMが特定の状態になると、Animation Clipが割り当てられます。 Animatorは、ゲームオブジェクトで使用するために、Animatorコンポーネントを介してそのオブジェクトに割り当てる必要があることは明らかです。

  • Animation Clipsは実際のアニメーションを含むアセットですが、ゲームオブジェクトにコンポーネントとして割り当てられることはありませんが、代わりに前述のようにAnimatorで参照する必要があります。

  • ブレンドツリーは、線形補間を使用して異なるアニメーションをシームレスにブレンドするために使用されます。アニメーターは、複数のアニメーションクリップを持つ「特別な」状態です。複数のアニメーションクリップを入れて、ある状態から別の状態への遷移を表示するために補間することができます。

引数はあなたが、アニメーターについての公式ドキュメントを読んで、それに入るために開始アニメーションクリップ、ここで木をブレンドすることができ、非常に広いです:

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

+0

私はそれを読んでするつもりです。しかし、私が一般的に理解しているかどうかを確認するために、アニメーションクリップを再生したい場合は、アニメーターで新しい状態を作成し、この状態にアニメーションクリップを追加する必要があります。アニメーションを再生する。 (ちょうど私が現在の状態を演奏しているように動作していますが、アニメーションクリップを状態に追加して再生する必要があります)。 –

+1

はい、それです。 'Animator Controller'には' Animation Clip'(状態がブレンドツリーの場合はそれ以上)を含む状態が含まれます。 – Galandil

+0

大変ありがとうございました。 –

関連する問題