Unityアニメーションについて ステートマシン アニメーター活用術 チュートリアル
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
Solo
and 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
Bool
Trigger
bool
bool
<リンク
false
関連
-
Rust関数の説明
-
MACシステムアップグレード後、仮想マシンがブラックスクリーンになる問題の解決
-
パフォーマンステスト QPS+TPS+トランザクションの基本分析
-
Scratch3.0 Windows環境パッケージのexeプロセスへの二次開発
-
SonarQubeの自動コードスキャン用インストールと統合方法
-
HTTP3の解析
-
フィンドラーの携帯電話パケットキャプチャープロセスを実装するためのソフトウェアテスト
-
0から1へのバックエンドアーキテクチャ構築の進化(MVC、サービス分割、マイクロサービス、ドメインドリブン)
-
WordPressの投稿をカスタムフィールドで並べ替える方法
-
シェア ソフトウェアテストに必須のテストツール一覧のまとめ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
CookieのSameSiteプロパティの概要
-
ゲーム開発Unity2D画像任意の形状壊れたローブ効果ショー
-
ブレンドシェイプスイッチによるUnityの表情変化 アニメーションチュートリアル
-
Scratch 3.0の初期化でSeven Cows Cloudにsbsファイルを読み込む方法
-
VSCodeでsshキー不要のサーバーへのリモートログインを行う方法
-
Webからイントラネットへの浸透のプロセスを詳しく解説
-
WordPressで記事を公開する際の著者名をカスタマイズする方法を伝授
-
パフォーマンステストによるネットワークスループット監視プロセスの説明
-
WordPressメディアライブラリのカテゴリ/フォルダ管理プラグインのおすすめをいくつか紹介します。
-
IntelliJ IDEA/Android Studioベースプラグイン開発ガイド(推奨)