あの、いやなむしを動かそう

皆さんこんにちは。

 

前回はvelocityを使用したキャラクターの移動についてお話しました。

 

その際嫌われ者の黒い虫についてちょっと触れたかと思います。

 

まあ言ってしまえばゴキブリなわけですけど、

 

ゴキブリは止まっている状態からのスタートダッシュが一番早いらしいです。

 

さて、Velocityを使った移動は、質量や重力を無視した非現実的な感じの動きになるという
問題があるということを色々と調べていく中で知ったわけですが、

 

ゴキブリのあのヤバいスタートダッシュはvelocityでも
十分リアルに表現可能なんじゃないかという考えに達したわけです。

そんなわけで買ってしまいました。

 

アセットストアで見つけたリアルなゴキブリのCG。

 

もっとリアルなものもあったのですが、皆さんの迷惑になると思い
自分的に2番目にリアルなやつにしました(笑)

 

プレビューを見てみた感じだとすごいリアルな動きをしていて気持ち悪くなりながらも、

 

15ドルでこれはいい買い物だったと感じております。

 

というわけで今回はこのゴキブリを縦横無尽に動かしていきたいと思います。

まずはアニメーションの設定。

 

今回はその場で足踏みをしながら止まっている状態のidleクリップがあったのでぜひ使っていこうと思います。

 

idle→walkという流れにするわけですが、

 

今回は方向キーを押すとwalkに遷移するようにしていきたいと思います。

 

前回までのロボットだと、アニメーションとキャラクターの移動は連動させていなかったので、
今回は挑戦してみようと思います。

コードはこんな感じ。

 

キャラクターを移動させるというところは一緒なのでコードが大きく変化しているわけではありません。

 

Rigidbodyを取得したようにAnimatorも同時に取得しているのですが、

 

animator.SetFloat(“Speed”, rb.velocity.magnitude);

 

大切なのはこの部分です。

 

アニメータの図を見るとわかるとおり、今回はパラメータをfloatで作成し、名前をSpeedとしています。

 

初期値は0ですが、これが0.1より大きくなるとwalkに遷移し、0.1より小さくなるとidleに遷移するように設定しました。

 

Speedにはそのまま、rb.velocity.magnitudeが入ります。

 

Magnitudeはベクトルの長さを返すものです。

 

つまり絶対値。

 

最初これに気づく前は、座標の左側つまりマイナス方向に移動したときは-1.0で取得されるのでなんでバグにならないのかと不思議でしたが、magnitudeの意味を知ったら納得です。

 

あくまでベクトルの大きさ=絶対値だということだからですね。

 

こんな感じで時々数学の考え方が必要なのが難しいところです。

 

自分は文系なので数学は本当に苦手でした…

あとは動くスピードを上げたかったので変数walkSpeedを用意し、値を10としました。

 

実際に動かしてみるととても速かったです。

 

今回は方向キー入力と同時にゴキブリが歩くアニメーションに遷移するよう設定をしました。

 

しかしこのままでは一つ問題があります。

 

ゴキブリが動く方に頭が向かずにそのまま水平移動しているようになってしまっています。

 

というわけで次回はゴキブリがしっかり方向転換するように修正していきたいと思います!