見出し画像

Unityによる歩行アニメーション

おはようございます。

今日はUnityを使用した、歩行アニメーションについて考えてみたいと思います。

眼帯をした男の画像

眼帯をした男の画像をいただきました。これをUnityで歩かせます。

1.キャラクターのことを考える

 この男は、本質的には、なにかのキャラクター二次創作です。
しかしながら、私は今回、あまり知識をつけずこれに望んでいます。
当キャラクターに対するリスペクトは当然ありますが、別キャラとしてゼロから考えてみたいと思います。

目つきがクレイジーなので、おそらく退役軍人で、常在戦場の考え方が身についてしまっており、他人にもそう接してしまうのでしょうか。
差分でも工事用ヘルメット着用の姿もありました。工事現場を切り盛りして生活しているのかもしれません。

そんなキャラクターということにして考えてみましょう。

Unityでは、リグを共有することができます。歩行アニメーションを作ったら、同じリグを別のキャラクターにもコピーすることができます。

しかし、先日アニメーションの学習をしました。

歩行のコピーは、クリエイターとして手抜きではないか。
学習を進める中でこのような思いに至ったので、一人ひとり、愛情を持って歩行を検討いたしましょう。
速度重視でキャラクターを量産するという点では、リグのコピーはとても有効です。場合によって使い分けましょう。訓練された兵士など、同じ動きで違和感が無い場合も多々あるでしょう。

2.テンポを考える

Unityのアニメーションは1秒を60分割で編集する

前提として絶対知っておかないといけない。

これは、先に考えていましょう。
一般的に使用される数値では無いので。

1秒間に24フレームの場合、歩行の目安となるテンポが以下。
24FPSの場合の歩き目安(1歩)
4フレーム=非常に速い走り(1秒あたり6歩)
6フレーム=走り、または非常に速い歩き(1秒あたり4歩)
8フレーム=ゆっくりした走り、またはマンガ歩き。(1秒あたり3歩)
12フレーム=キビキビしたビジネスライクな歩き、ナチュラルな歩き(1秒あたり2歩)
16フレーム=のんびりした歩き。休日(2/3秒で1歩)
20フレーム= 年配のかた、または疲れている人(およそ1秒で1歩)
24フレーム= 遅い歩き(1秒で1歩)
32フレーム= "道がわからない・・・わからなくなったんだ・・・"

60FPSの場合の歩き目安(1歩)
1秒間に24フレームの場合、1フレームは1/24=0.041666667秒
1秒間に60フレームの場合、1フレームは1/60=0.016667秒
24フレームの1フレームは、60フレームの2.5フレームと等しい。(ややこしい)
するってえと・・・おおよそ以下に換算できる

10フレーム = 非常に速い走り
15フレーム = 走り、または非常に速い歩き(1秒あたり4歩)
20フレーム = ゆっくりした走り、またはマンガ歩き。(1秒あたり3歩)
30フレーム = キビキビしたビジネスライクな歩き、ナチュラルな歩き(1秒あたり2歩)
40フレーム= のんびりした歩き。休日(2/3秒で1歩)
50フレーム = 年配の方の歩き方または疲れている人(およそ1秒で1歩)
60フレーム = 遅い歩き(1秒で1歩)
80フレーム = "道がわからない・・・わからなくなったんだ・・・"

これをもとに編集しましょう。あとあと、中間点が必要なので、走り、または非常に速い歩きの場合、16フレームにしたほうがやりやすいかもしれません。

アニメーションの場合、ゼロフレームには何もありません。
Unityの場合、ゼロフレームがあります。
中間点の考え方に注意しましょう。ゼロから数えたら間違えます…

彼の歩行は常人よりややゆっくり。40フレームで一歩進めます。

上記の記事で、細かな使い方を説明していますので、割愛できるところは飛ばします。

Unityを立ち上げて、2Dプロジェクトを作成して、ボーンを生成して、アニメーターを作る。

細かい手順は割愛しますが・・・
足元を流れる草画像を作り、歩かせたい方向と逆に流します。
絵にボーンを割り当てます

では、いよいよアニメーションへ。

とりあえず、アイドル状態を作る。
呼吸は、通常1分間に約12から20回行われている
2秒で吸って、2秒で吐いて1秒休むという、5秒サイクルで呼吸する。

ゆっくり歩き

bodyの位置などのプロパティを追加。
右足コンタクトを0
左足コンタクトを40
頭の動きを先に置いておこう。

①と⑤がキーフレーム、③がインビトウィーン。

①が0フレームとなり、10フレームごとにこのように置くのだ。

股間のボーンを選択して位置を変更する

股間のボーンで上下を表現
10フレームごとに上下移動をする。

体の傾きを入れる。

20フレームごとに角度が変わる

続いて右足を動かし、左足を動かす。わけだが、左右の歩幅は同じでないとおかしい。
また、角度も左右均等でなければおかしい。
歩幅をメモしておく。
足首のポジションもメモしておく。

メモにあわせてアニメーションを組んでいく。

この手順なら、手戻りが少ないかもしれない。しかし、忘れている箇所があるような気がして困る。そこはセンスというよりは集中力の問題な気がしますね。

がば難しかばってん

とても難しいです。

とまあ、こんな調子でアニメーションを作っていきましょうね。

実際にカーソルで左右にキャラクターを動かそうとする場合
アニメーターのAnyState機能を使用するより、スクリプトから直接呼び出して、idoleへ遷移した方がやりやすいです。

パラメータを使用せず、以下のような具合で。
    if (Input.GetKey(KeyCode.LeftArrow))
    {
        //Debug.Log("左押された");
        transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); // 左向き
        animator.Play("slowwalk");
        
    }
    if (Input.GetKey(KeyCode.RightArrow))
    {
        //Debug.Log("左押された");
        transform.localScale = new Vector3(-0.2f, 0.2f, 0.2f); // 右向き
        animator.Play("slowwalk");
    }

ではまた、今回のも誰かのお役に立てば幸いです。

コンゴトモヨロシク。


この記事が気に入ったらサポートをしてみませんか?