キャラクターの向いている向きに動かすラジコン操作機能を作成する

前回まではUnityで使うキャラクターにカメラを追従させキャラクターは上のキーを押せば奥側に下のキーで手前側に移動させ、そちらの方角にキャラクターを向けさせていました。

全体を見回すアクションゲームであればその方がアクション性が高くなって面白いです。
市販ゲームで言えば三国無双系。

ガンシューティング風の場合はカメラはキャラクターの頭の後ろに常にあり、向きを変えたらカメラもキャラクターの後ろに回り込み、上のキーを押したらキャラクターの向いている方角に移動し、右や左のキーを押したらキャラクターの向きを変えるようにしたいです。
市販ゲームで言えばバイオハザード4や5系、いわゆるラジコン操作というやつです。

今回はそのバイオ系のラジコン操作が出来るようにします。

スポンサーリンク

バイオハザード風のキャラクターの動かし方

public var walkRotate : int;

という1秒間でキャラクターが回転する角度を指定出来るようにします。

キャラクターが歩く時の処理を行う場所で移動キーが押された時に↑↓のキーの時はキャラクターを前後の進め、
←→のキーの時はキャラクターの向きを変更します。

方向キーを押している度合いを取得し、velocityに入れます。

velocity.magnitudeが0.1fより大きければ、前進もしくは回転をさせます。
Input.GetKeyで左右のキーが押されているか判定し、押されている間はキャラクターのY軸の角度にwalkRotateの角度を足していきます。

最後にvelocity.xの値は0に初期化しておきます。
Input.GetAxis(“Horizontal”)で得た値は回転にのみ使用し、移動はInput.GetAxis(“Vertical”)の値だけ使う為です。

次にキャラクターを移動させている個所を変更します。

まずはVector3.zeroでdirをVector3(0, 0, 0)に初期化します。

velocity.zつまり↑↓のキーを押している時の強さが0.1fを超えていた時または-0.1fより下の時にキャラクターを移動させます。

transform.forwardはキャラクターが向いている方向なのでそこに移動力velocity.zをかけます。
その後、重力値を加味する為に

dir.y += velocity.y * Time.deltaTime;

とします。

cCon.Move(dir * speed * Time.deltaTime);

で実際に移動させます。ここは通常のキャラクター移動と同じですね。

次にMainCameraを主人公キャラの子要素にして、キャラクターを追従するスクリプトを設定していたらスクリプトコンポーネントのチェックを外します。

カメラの位置を調整すればカメラは主人公キャラの子要素なのでキャラクターと一緒にカメラが移動します。

これでキャラクターをラジコン操作で動かせるようになりました。

Unityの実行ボタンを押して試してみましょう。

walkrotate

上のように移動するようになりました!

キャラクターの頭の後ろにカメラを固定したアクションゲームを作りたい時に参考になると思います。