Unityに関連する記事です

AnyStateについて


 AnyStateやAnimator自体の説明については割愛します。こちらの記事を参考にしてください。他にも色々な役に立つ記事があります。
YTTMWORK様
Animator
https://yttm-work.jp/unity/unity_0018.html
 
 AnyStateは条件を満たせば自動的にAnimationStateを遷移してくれる機能です。
そうすることで、各State同士をTransitionでつなぐことなく、AnimationStateの遷移が可能になります。
上手に活用することで、見た目にもわかりやすくなります。



AnimatorState用のenumを作成する


 まずは遷移する際の処理に使用する文字列をEnumにしておきましょう。
これで文字列を直接記述せずに、遷移可能なStateだけを選ぶことが出来ます。

  private enum AnimatorState {    // 用途に応じてpublicに変更してください
        Attack,
	Jump,
	Speed,
	AttackSpeed,
    }

AnimatorのParametersを登録する


 先ほどの画像にもありましたように、今回は以下のParameterを用意しました。LayersはBaseLayerのみを使用しています。

・Speed      Float型。移動用のState遷移用
・AttackSpped   Float型。攻撃時のアニメーション速度の設定用

AnimationClipの設定

 今回利用したAnimationClipの一覧です。各アニメーションは適宜なものを利用しましょう。
Idle(待機用。Speedの値で遷移する。Unitychanに入っているAnimationClip)


Locomotion(移動用。Speedの値で遷移する。Unitychanに入っているAnimationClip)


Attack(攻撃用。AnyStateから遷移する)
Speedの項目にあるMultiplierプロパティのParameterにチェックをいれると、Speedの値をスクリプトから変数によって変化させることができるようになります。
このParameterに選択できるものは登録されているParameterのみになります。今回はこのSpeedの値の変更用にParameterにAttackSpeedを用意しましたので、
そちらを指定します。(Float型のParameterのみ選択できます)


Jump(ジャンプ用。AnyStateから遷移する)


Transitonの設定


 今回設定をしたTransitonの画像です。
 AnyStateからAttackとJumpにはTransitonを不要です。それはAnimator.Play()メソッドを使うためです。

 Animator.Playメソッドは現在のStateがどこにあっても(他のアニメーションの途中でも)、スクリプトから引数で指定したStateのアニメーションを再生できるメソッドです。

Animator.Playメソッドについては公式リファレンスを参照してください。
Unity公式
Animator.Play
https://docs.unity3d.com/ja/current/ScriptReferenc...

このメソッドにはオーバーロードが2つありますが、今回は最初の処理を利用しています。
public void Play (string stateName, int layer= -1, float normalizedTime= float.NegativeInfinity);

他にもわかりやすい記事があります。この記事を読んで頂くと、Animator.Playに向いているアニメと向いていないアニメの理解が深まります。
Animator.Playメソッドは移動系は向いていなくて、トリガー系の処理には向いていることが分かります。
UNITYで魔物使い♀ゲームを作る
Unityで3DのARPGフリーゲームを制作中!【UnityC#講座】ユニティちゃんでもっとAnimator Controllerを上手く使いたい
https://unity-shoshinsha.biz/archives/471

Idle => Locomotion


Locomotion => Idel


Attack => Exit


Jump => Exit


Animator関連の処理をスクリプトに記述する


 移動と攻撃とジャンプのアニメ再生処理のはいったPlayerControllerのサンプルスクリプトです。

 <= クリックすると開きます


 実行して、アニメーションの遷移を確認します。
移動中にジャンプや攻撃が行われた場合、移動のアニメを中断して、ジャンプなどのアニメーションが再生されています。

https://gyazo.com/3182c7d8b87bf489b71823cd84cf0d61

同じアニメーションを何度もループしてしまう場合(Can Transition To Selfの設定を確認する)


 Animator 内の AnyState から遷移するアニメーションのインスペクターに、CanTransitionToSelf という項目があります。
こちらのチェックが入っていると、自分自身のStateに対して遷移するアニメーションについては無視されるようになります。
(一度再生されたアニメーションに対して、繰り返しの処理を行わなくなります)

 同じアニメーションを何度もループしてしまうような時には、この項目を確認してチェックを外すようにしましょう。

 こちらの記事に詳しい説明が載っていますので参考にしてください。

テラシュールブログ様
【Unity】AnimationControllerのAnyStateを使用してる際、現在のStateへ何度も移動しないようにする
http://tsubakit1.hateblo.jp/entry/2017/01/13/23300...

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます