江上宿六です。
制御と言っても漠然とし過ぎててアレですが。 簡単に出来るだろうと思った事が
地味に上手く行かなかったり手間がかかったりした体験のもとに記されます。
まぁ、前回である程度アニメーションの事は片付いたという事にして
キャラがアニメーションするなら実際に動かしてみたくなるというのが人の心。
操作関係も矢印キーを押した方向に動くというように変えてみましょう。
左矢印を押した時にアニメーションを再生するというの同時にbool型のisMoveが
trueになるようにしました。 この変数は移動しているかどうかを調べるというより
キー入力を調べるようなものとして宣言しています。 入力があればtrueになり
Updateが来る毎にfalseに戻ります。 これを各方向の分だけ記述しました。
その後の方にキー入力を判定しています。 trueの時にシフトが押されていれば
走るようにし、押されてなければ走らないようにしました。 これを書いてる時に
思いましたが、isWalkのセットもここで良さそうでしたね。
画像は歩きのみですが走る方もちゃんと出来ています。 左下のUIに関しては
それ用のオブジェクトとスクリプトを適当に作りましたが、詳細は要りませんね。
それではキャラの向きも連動して変わるようにしてみましょう。
これまでオブジェクトの向きを変えるのにtransform.Rotateを使ってきましたが、
今回は直接キャラの方向を指定したいので、キャラのコンポーネントにある
Transform.Rotationをいじってやれば実現出来そうですね。
今回はキャラの向きがなんか180度回転してしまっているので、左は270度っと。
どうやらこれでは駄目な様です、別の方法を試してみましょう。
ベクトルで指定すればと思いましたがこれも駄目でした。
これ、実はでもなんでもなく(自分含む)Unity初心者が陥りやすい所なのです。
あのインスペクターで見えているものと実際のものが違っていたりするのです。
マウスオーバーすると、Vector3をQuaternionに暗黙的に変換出来ませんと
表示されます。 このtransformのrotationというのはQuaternionだったのです。
このクォータニオンが何かという説明は自分には難しいのですが、四元数とかいう
そういう回転の定義的なのがあるという感じには覚えておけば良いでしょう。
これを知らないと回転出来ないなんて事はないので、こういう風にしましょう。
Quaternion.Euler()とする事でxyzで表されるオイラー角をクォータニオンに
変換してくれます。 それをtransform.rotationに代入すれば良いわけです。
四方向設定してみました。 おそらくちゃんと回転してくれていると思います。
これに移動量なんかを設定してやれば立派に移動していると言えるでしょう、多分。
Blenderでもたまにクォータニオン的なのを目にしますけどね、見なかったことに。
そんな感じです。 これを使わずに指定角度に向かって回転させたりしても
良いとは思います、動きも滑らかに見えるでしょう。 小回りはアレしますけど。