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フレームごとにこのように置くのだ。
股間のボーンを選択して位置を変更する
体の傾きを入れる。
続いて右足を動かし、左足を動かす。わけだが、左右の歩幅は同じでないとおかしい。
また、角度も左右均等でなければおかしい。
歩幅をメモしておく。
足首のポジションもメモしておく。
メモにあわせてアニメーションを組んでいく。
この手順なら、手戻りが少ないかもしれない。しかし、忘れている箇所があるような気がして困る。そこはセンスというよりは集中力の問題な気がしますね。
とても難しいです。
とまあ、こんな調子でアニメーションを作っていきましょうね。
実際にカーソルで左右にキャラクターを動かそうとする場合
アニメーターの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");
}
ではまた、今回のも誰かのお役に立てば幸いです。
コンゴトモヨロシク。
この記事が気に入ったらサポートをしてみませんか?