Unity備忘録30頁目「キャラクターの制御」

江上宿六です。

 

制御と言っても漠然とし過ぎててアレですが。 簡単に出来るだろうと思った事が

地味に上手く行かなかったり手間がかかったりした体験のもとに記されます。

 

まぁ、前回である程度アニメーションの事は片付いたという事にして

キャラがアニメーションするなら実際に動かしてみたくなるというのが人の心。

操作関係も矢印キーを押した方向に動くというように変えてみましょう。

f:id:y6yegami:20181207173605p:plain

左矢印を押した時にアニメーションを再生するというの同時にbool型のisMoveが

trueになるようにしました。 この変数は移動しているかどうかを調べるというより

キー入力を調べるようなものとして宣言しています。 入力があればtrueになり

Updateが来る毎にfalseに戻ります。 これを各方向の分だけ記述しました。

f:id:y6yegami:20181207174332p:plain

その後の方にキー入力を判定しています。 trueの時にシフトが押されていれば

走るようにし、押されてなければ走らないようにしました。 これを書いてる時に

思いましたが、isWalkのセットもここで良さそうでしたね。

f:id:y6yegami:20181207175752g:plain

画像は歩きのみですが走る方もちゃんと出来ています。 左下のUIに関しては

それ用のオブジェクトとスクリプトを適当に作りましたが、詳細は要りませんね。

 

それではキャラの向きも連動して変わるようにしてみましょう。

これまでオブジェクトの向きを変えるのにtransform.Rotateを使ってきましたが、

今回は直接キャラの方向を指定したいので、キャラのコンポーネントにある

Transform.Rotationをいじってやれば実現出来そうですね。

 

今回はキャラの向きがなんか180度回転してしまっているので、左は270度っと。

f:id:y6yegami:20181207181811p:plain

どうやらこれでは駄目な様です、別の方法を試してみましょう。

f:id:y6yegami:20181207182042p:plain

ベクトルで指定すればと思いましたがこれも駄目でした。

これ、実はでもなんでもなく(自分含む)Unity初心者が陥りやすい所なのです。

あのインスペクターで見えているものと実際のものが違っていたりするのです。

f:id:y6yegami:20181207182517p:plain

マウスオーバーすると、Vector3をQuaternionに暗黙的に変換出来ませんと

表示されます。 このtransformのrotationというのはQuaternionだったのです。

このクォータニオンが何かという説明は自分には難しいのですが、四元数とかいう

そういう回転の定義的なのがあるという感じには覚えておけば良いでしょう。

 

これを知らないと回転出来ないなんて事はないので、こういう風にしましょう。

f:id:y6yegami:20181207183645p:plain

Quaternion.Euler()とする事でxyzで表されるオイラー角をクォータニオン

変換してくれます。 それをtransform.rotationに代入すれば良いわけです。

f:id:y6yegami:20181207184404g:plain

四方向設定してみました。 おそらくちゃんと回転してくれていると思います。

これに移動量なんかを設定してやれば立派に移動していると言えるでしょう、多分。

 

Blenderでもたまにクォータニオン的なのを目にしますけどね、見なかったことに。

そんな感じです。 これを使わずに指定角度に向かって回転させたりしても

良いとは思います、動きも滑らかに見えるでしょう。 小回りはアレしますけど。