1. ホーム
  2. Web プログラミング
  3. 関連情報

Unityアニメーションについて ステートマシン アニメーター活用術 チュートリアル

2022-01-18 10:04:20

I. 前書き

Unity アニメーションは2つの方法で制御することができます。
1 Animation これは、シンプルでわかりやすい方法です。 Play("Idle") または CorssFade("Idle") をクリックすると、アニメーションが再生されます。
2

Animator
Unity5.x
その後、内部にブレンドアニメーションを追加することで、アニメーションの切り替えをスムーズに行うことができるので、この方法を使うことをお勧めします。

II. アニメーターコンポーネント

コンポーネントを作成するには Animation ウィンドウ(ショートカットキーは Ctrl+6 ) の中で Create New Clip 作成 Animation を指定した場合 Animator が無言で登場し、対応する GameObject の上に

<イグ

III. アニメーターコントローラーファイル

最初のステップで生成された Animator コンポーネントは、最初の Controller パラメータは Animator が作成時にすでに割り当てられている場合は、その値をクリックすることで Project のウィンドウを開くと、次のように表示されます。 Controller 対応するファイルは .controller ファイルを作成します。
Animator Controller これはアニメーターコントローラーで、異なるアニメーションの切り替えを担当し、アニメーション効果を作成するために必要なコンポーネントです。

<イグ

を渡すこともできることに注意してください。 GameObject の上に Add Component を追加し、新たに Animator コンポーネントがありますが、この場合 Animator Controller パラメータはデフォルトでは空なので、手動であらかじめ用意された .controller ファイルをパラメータの場所に追加することで、アニメーションコントローラを正しく動作させることができます。

IV. アニメーションクリップファイル

ダブルクリック .controller" ファイルを開くと、ポップアップが表示され Animator ウィンドウには、アニメーションコントローラファイルのすべての内容が表示されます (上部のツールバーで Window - Animator をクリックするとこのウィンドウが開きます)

Project ウィンドウで、右クリックし Create->Animation 作成 Animation Clip (その .anim ファイル)

次に .anim ファイルを Animator ウィンドウをアニメーターコントローラーの状態として表示します ( State )

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


以下のように

なぜ?
もし Inspector スイッチから Debug モード

<イグ

を見ることができます。 Animation Clip があります。 Legacy チェックボックス

Legacy は、レガシー、つまり伝統の継承を意味します。 Animation を再生するためのコンポーネントです。 Animation Clip のアプローチでは、もし Animation コンポーネントを再生します。 Animation Clip をテストしたい場合 Legacy を使用しますが、これは時代遅れのやり方であり、推奨される方法は Animator を再生するために Animation Clip .

V. ステートマシンの状態(State)

Animator Controller には、3つの状態が付属しています。 Any State , Entry Exit .

1. 任意の状態状態

は、Any Stateの特殊な状態を表します。例えば、キャラクターがどの状態でも死亡状態に切り替わる可能性を持たせたい場合は Any State がそれを可能にします。ある状態がどの状態からでも同じ条件でジャンプできることがわかったら、その状態から Any State というように、遷移関係を簡略化することができます。

2. エントリー状態

は、ステートマシンのエントリ状態を表します。ある GameObject が追加されます。 Animator コンポーネントは、その役割を果たし始める。 その
もし Animator Controller は複数の Animation であれば、デフォルトで Animator コンポーネントは、どのアニメーションを再生するのでしょうか?それは Entry で決定します。
しかし Entry はアニメーションを含まず、アニメーションを持つ状態を指し示し、それをデフォルトの状態として設定します。デフォルトに設定されたステートは、オレンジ色で表示されます。

もちろん、いつでも Right mouse button->Set as Layer Default State を使用すると、デフォルトの状態を変更できます。

覚えておいてください Entry Animator コンポーネントがアクティブになると <マーク は、1つしかないデフォルトの状態を持ちます。

3. 退出状態

ステートマシンの終了状態を示し、赤色で表示されます。アニメーション・コントローラーが1層しかない場合、このステートはあまり意味がないかもしれません。しかし、サブステートマシンから前のレベルに戻る必要がある場合 ( Layer を指すようにします。 Layer で完了です。

VI. アニメーション状態のプロパティ

カスタムの状態を選択し、新しい状態を Exit ウィンドウを開き、どのようなプロパティを持つかを確認します。

<テーブル 属性名 説明 動作 ステートに対応するアニメーションです。各ステートの基本プロパティは、定義されているアニメーションクリップを選択するだけです。 速度 アニメーションの速度を指定します。デフォルト値は1、つまり元のアニメーションの1.0倍の速度になります。 ミューティプライヤー 右のパラメータをチェックすると、領域1で定義されたパラメータが速度計算時に考慮される。選択されたパラメータがsmoothの場合、アニメーションの速度はsmooth * speed * fps(アニメーションクリップで指定)として計算されます。 ミラー ヒューマノイドアニメーションのみ サイクルオフセット サイクルオフセットは、0-1.0の範囲で、アニメーションの開始のオフセットを制御するために使用されます。正弦関数のオフセットと比較して理解してください。これはアニメーションの開始位置にのみ影響します。 フットIK ヒューマノイドアニメーションのみ デフォルトを書き込む デフォルトのままにしておいた方が良いので、興味があれば公式マニュアルを参照してください トランジション このステートによって開始された他のステートへの遷移のリストで、ステートマシンの効果をプレビューする役割を果たすSoloとMuteのパラメータが含まれています。 ビヘイビアを追加する ステートにビヘイビアを追加するために使用します。

VII. 状態間の遷移(トランジション)

直感的には、異なる状態を結ぶ有向矢印である

から新しいコードを作成するには Inspector から state A で直接、遷移する。 State B マウス上で state A をクリックし、表示された矢印をドラッグして Right click - Make Transition は、マウスの左側でクリックするだけです。

<イグ

VIII. 状態制御パラメータの追加

パラメータは State B , Float ,

Int

Bool
Bool
Trigger
.
Float
Int
Parameters used to control the state of an animation, such as speed and direction, which can be quantified numerically.

Bool Used to control the transition of the animation state, e.g. from walking to running.
Trigger is also essentially bool type, but it defaults to false and when the program is set to true it will automatically change back to false .
The following creates a Int parameter of type AnimState IX. Edit the conditions for switching states Click the concatenation in the Inspecter window, you can set it in the Conditions column, the following figure shows that when the parameter
AnimState for 0 This animation will be executed when Any State to New Animation2 transition
Parameters must be added in the Parameters panel to be viewed here, and the second condition to be added is the && "with" relationship, which must be satisfied at the same time. X. Control state in code We can set the conditional state through the code to achieve the purpose of animation switching Animator ator = go1.GetComponent<Animator>(); SetInteger("AnimState", 0). ator.SetInteger("AnimState", 0); The code above makes the AnimState The value of this parameter is 0 that satisfies the value from Any State to New Animation2 to the transition condition of New Animation2 The transition of the animation. XI. Check the animation state Method 1, AnimatorStateInfo Add code to the script // Check if the jump animation is playing. AnimatorStateInfo stateinfo = anim.GetCurrentAnimatorStateInfo(0); bool playingJump = stateinfo.IsName("jump"); if(playingJump) { if(stateinfo.normalizedTime < 1.0f) { / } else { //Playing ends } } When in the state jump , then stateinfo.IsName("jump") returns true Method 2. Inherit StateMachineBehaviour Animator Each state of the StateMachineBehaviour class for detecting animation slices in the state machine ( Anamation ) of the running state.
Official example. https://docs.unity3d.com/ScriptReference/StateMachineBehaviour.html
Just mount the script on the corresponding state. The code is as follows
Generic; using System; Generic; Generic; using UnityEngine; public class JumpState : StateMachineBehaviour private GameObject player; private GameObject player; override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // The first frame of the state being played is called 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) { // The last frame of the transition to another state is called Debug.Log("-------------OnStateExit-----------------"); } // OnStateMove is called right after Animator. override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // Called right after OnAnimatorMove } // OnStateIK is called right after Animator. override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // Called after OnAnimatorIK for the monobehavior of each frame while the state is playing. // Note that OnStateIK is only called if the state is on a layer with an IK pass. // By default, the layer does not have an IK pass, so this function will not be called // For more information on the use of IK, take a look at this article "Animator uses IK to implement head and body following // https://www.jianshu.com/p } } XII. Control playback speed Animator ator = go1.GetComponent<Animator>(); var stateinfo = ator.GetCurrentAnimatorStateInfo(0); if(stateinfo.IsName("Jump")) { ator.speed = 2; } XIII. Notes 1 Uncheck Can Transition To Self otherwise the animation will jitter 2 Action loop. Otherwise, if there is no next state switch, just stop the action 3. We usually want to switch immediately, so here do not check the Has Exit Time If checked, the switch will not be allowed until after the action is completed. XIV. Additional 1. Mirror Mirror, can invert the current animation, reduce the animator's workload 2、Solo and Mute Mute Equivalent to disabling the target transition. Solo Indicates that only this transition is in effect
You can select more than one, and an arrow will appear when selected
Conditions met take precedence over Soloand will still not transition when the condition is not met
The above is the details of the Unity animation state machine Animator tutorial, more information about the use of Unity animation state machine Animator please pay attention to other related articles of the script home!

The above is the details of the Unity animation state machine Animator tutorial, more information about the use of Unity animation state machine Animator please pay attention to other related articles of the script home!

Bool

Trigger

bool

<リンク false