キャラクターのラジコン操作機能を作成する | Unityを使った3Dゲームの作り方(かめくめ)

キャラクターのラジコン操作機能を作成する

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

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

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

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

今回の機能を作成すると、

walkrotate

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

今回の機能は以前から作成している機能に処理を追加しているので、このスクリプトは何?と思ったら以下の記事で今までの機能作成の流れを確認出来ます。

Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?
スポンサーリンク

バイオハザード風のラジコン操作機能の作成

それではバイオハザード風にキャラクターを動かす機能を作成していきましょう。

AnimatorControllerの作成

前に進む、後ろに進む、左に回る、右に回るといった動作を個別の状態として作成しアニメーションを変更します。

アニメーションパラメータには右周りか左回りかでアニメーションを変更する為、float型のRotateを作成します。

横回転と後ろ向きに歩く状態を作成

↑のような状態と遷移を作成します。

Idle→WalkはSpeedがGreaterで0.1
Walk→IdleはSpeedがLessで0.1
Idle→WalkBackはSpeedがLessで-0.1
WalkBack→IdleはSpeedがGreaterで-0.1

Idle→RightRotateはRotateがGreaterで0.1
RightRotateはRotateがLessで0.1
Idle→LeftRotateはRotateがLessで-0.1
LeftRotate→IdleはRotateがGreaterで-0.1

上の全てのSettingsのInterrupt SourceにNext Stateを設定します。

Interrupt SourceにNext Stateを設定したのは次の状態での遷移条件が成立したらすぐさま次のアニメーションへと移行させる為です。

次に攻撃状態への遷移です。

Walk→AttackはAttackがトリガーされた時
WalkBack→AttackはAttackがトリガーされた時

WalkBack→Attackは遷移を作らなくてもいいかもしれません。

これでAnimatorControllerの作成が終了しました。

キャラクター操作スクリプトの作成

キャラクター操作スクリプトCharacterScriptの移動処理部分を変更します。

基本的なキャラクター操作スクリプトは

Unityで主人公キャラが剣を振って敵キャラを攻撃出来るようにする機能を作成します

のようなスクリプトで移動処理をラジコン操作に変えていきます。

キャラクター操作はキーボードで言うと↑↓のキーを押したらキャラクターが向いている方向の前後に動き、←→のキーを押したらキャラクターを回転するだけにします。

←→のキーを押している時はキャラクターのY軸を押した方向に回転しています。

hInputの値をそのままアニメーションパラメータのRotateに渡す事でLeftRotate、RightRotateの切り替えが出来ます。

前後にキャラクターを動かす場合もやっている事は同じでキャラクターが向いている方向(transform.forward)にvInputとwalkSpeedの値をかけて移動値を計算しています。

次にキャラクターの状態変更メソッドであるSetStateを修正します。

状態変更時に移動速度velocity、アニメーションパラメータのRotate、Speedを0に設定します。

これは攻撃や銃を構えた時に移動や回転に関するアニメーションパラメータをリセットし、攻撃や銃を構えるアニメーションに遷移させる為です。

これで移動スクリプトの修正が完了です。

Main Cameraをキャラクターの子要素に配置するとキャラクターの前方方向にカメラが向くのでカメラの移動や回転について考慮する必要はありません。

それでは実行してみます。

↑のようになりました。

キャラクターが↑↓のキーで前後に動き、←→のキーでキャラクターを回転させています。

最初に上下のキーを押してから左右のキーを押すと前後のアニメーションで斜めに動き、最初に左右のキーをおしてから上下のキーを押すと左右のアニメーションのまま斜めに動きます。

斜め前に移動する時に特定のアニメーションにしたい時はAnimatorControllerを細かく作る必要があります。

Unityのブレンドツリーを使ってアニメーションの切り替えを細かく設定し、向きを変える時の角度によってアニメーションを変更するようにします

カメラをキャラクターの子要素に配置した事でキャラクターの向きに合わせてカメラが相対的に移動しています。

カメラをキャラクターの子要素に配置せずキャラクターを徐々に追いかけさせるには、

Unityのゲームでキャラクターとカメラの間に壁が入ってしまった時、壁でキャラクターが見えなくなるのでカメラ位置を調整しキャラクターを映すようにします。

を参照してください。

ラジコンキャラクターの確認

機能が出来上がったので確認してみましょう。

↑のようになりました。

最後の方でモノリスで障害物の確認をしています。

ここは月だったのか!?(謎)

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます