ユニティちゃんの2D横スクロールアクション(その6:アニメーション管理後編)【チュートリアル】

ども、ゴコーです。

前回は歩きアニメーションを入力に合わせて切り替えました。
今回は応用としてジャンプと入力を同期させてみましょう!

まず、ジャンプ関連のアニメーションは5種類ありましたね。
それぞれの内容を画像で見ましょう。

uni-tu-6-0

前回の移動切り替えは移動ボタンを押しているかどうかだけでフラグを立てましたが、
今回はジャンプボタンを押しているかだけでは判別できそうにありません。

ジャンプ中と落下中への切り替えは開始アニメーションが1回再生されたらという条件ですが

uni-tu-6-1

この3つは無理ですね。
これらには個別にフラグを設ける必要がありそうです。

と言う訳で、フラグを3つ増やしてみました。

uni-tu-6-2

isJumping = ジャンプフラグ
isFalling = 落下フラグ
isGrounded = 着地フラグ

です。
次はこれらでアニメーションを紐づけます。

uni-tu-6-3

まずはこんな感じです。

ジャンプ開始→ジャンプ中→落下開始→落下中→着地→待機

の順でアニメーション遷移するようにしましょう。
先ほど書いた様に、ジャンプ開始と落下開始、後は着地の瞬間も1度再生するだけでよさそうなので
それぞれからの遷移条件はExitTime1のままで良いですね。

ジャンプ開始、落下開始についてですが、RigidbodyのVelocityを活用します。
Velocityは速度という意味です。
上向きの速度が正の数を取るときはジャンプ開始、負の数を取るときは落下開始とします。
理由は、ジャンプを開始する要因がプレーヤーの入力に依るとは限らないからですね。
例えば、マリオなんかでジャンプ台に乗ってジャンプを始めたときはプレーヤーはジャンプボタンを押してないですよね?
例外はあるかもしれませんが、ジャンプボタンを押した瞬間、という指定の仕方よりは幅広く対応できるのではないでしょうか?

最後に着地。これは単純にプレーヤーが地面に接した瞬間でよさそうですね。
ジャンプ回数を制限する為に同じことをやっていますので、その瞬間に判定を取りましょう。


以上を踏まえて遷移させます。
アニメーターウィンドウに戻り、遷移条件を変えて行きましょう。

uni-tu-6-4 uni-tu-6-5 uni-tu-6-6

それぞれこのように変更しました。

では次にスクリプトを変更しましょう。

UnityChanController の MecCheck() の中身をこのように書き換えて下さい。

[csharp]

void MecCheck()
{
bool isRunning = InputHorValue != 0;
float velY = cRigidbody2D.velocity.y;
bool isJumping = velY > 0.1f ? true:false;
bool isFalling = velY < -0.1f ? true:false;
cAnimator.SetBool("isRunning",isRunning);
cAnimator.SetBool("isJumping",isJumping);
cAnimator.SetBool("isFalling",isFalling);
cAnimator.SetBool("isGrounded",isGrounded);
}

[/csharp]

変数が3つほど増えました。

velYはvelocityのY方向の大きさを記録する変数です。
isJumping、isFallingはそれぞれ跳んでいるか、落下しているかの判定です。
判定に0を使うと0.00000…みたいな桁の数字を拾ってしまうので0.1fとしました。

後はそれぞれをSetBoolでAnimatorと紐づけるだけです。

それでは再生してみましょう。


移動せずにジャンプを押すと上手くいきますが、移動しながらだと前と同じように走りながらジャンプしてしまいます。
これは、先ほどのアニメーターウィンドウで遷移を指定するときに、移動→ジャンプというパターンを作っていなかったからですね。

と言う訳で追加しましょう。
図で表すとこんな感じです。

uni-tu-6-7

さあ再生してみましょう!

uni-tu-6-8

ばっちりですね!

と言いたいところですが、このままではダメです。
この遷移はいきなり落下することを想定していないからです。
まあ、作業的にはトランジションを追加するだけなんですけどね。

簡単なので、チュートリアルでは解説しません。
写すだけになりがちなのがチュートリアルだと思うのであえて自習課題とします 笑
あらゆる場面を想定し、アニメーションが繋がるように遷移させてください。

次回からは、弾を撃てるようにしていきたいと思います!

では、また。

Comments

comments

スポンサーリンク
336*280px