Unityで銃を構えた時バイオハザード風にカメラをキャラに寄せる

今回はUnityで銃を構えた時にバイオハザードのようにカメラを移動させキャラクターに寄せる機能を搭載してみます。

カメラをキャラクターに寄せない場合キャラクターの手元がよく見えないのと、元々のカメラの視点によりますが、カメラがキャラクターの後ろ側にあった場合、キャラクターの少し左側の敵を攻撃しようと狙いを移すと、キャラクターと被って狙っている位置がわかりづらくなります。

そういった事がないように銃を構えた時はカメラをキャラクターのすぐ後ろ辺りに移動し、全体を見渡せるようにします。

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

↑のような感じで銃を構えた時にカメラをキャラに寄せる事が出来ます。

以前作成した壁対策用のカメラの移動機能と併用出来るようにスクリプトに処理を追加していきます。

カメラをキャラに寄せるようにした場合はキャラクターの上半身の移動は左には動かさず下は以前よりも制限を加えた方がいいかもしれませんね。

まったく見えない場所を攻撃出来るようになってしまいます。(^_^;)

スポンサーリンク

今回の機能を搭載する前に作っておかなければいけない機能

今回の機能を搭載するにあたって

Unityでバイオハザード風ガンシューティングの機能を作ってみます。今回は銃を構えた時にレーザーポインターの表示とシューティングポイントの表示、銃を撃った時に光を表示してみたいと思います。

を作成しておいてください。

また

Unityのゲームで初期のバイオハザード風に上半身の角度を変え、照準を合わせるような機能を作成していきます。

を作っておくと狙いを定める事が出来ます。

今回はキャラクターを写すカメラの間に壁が入った時のカメラの動き

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

の記事で作成したCheckObstaclesスクリプトに処理を追加する形になりますが、CheckObstaclesを使わない場合は別途スクリプトを作成し修正する事でも同じように出来ます。

ここまでの機能が出来ていればカメラをキャラクターに寄せる機能はさほど難しくないと思います。

カメラを動かすスクリプト

バイオハザードカメラ1

キャラクターとともに動くカメラMainCameraはキャラクターの子要素に置き、CheckObstaclesに処理を追加します。

カメラを動かす概要と設定項目

壁がカメラとキャラクターとの間に合った場合、カメラを壁の位置に動かしている機能を使っている場合は、銃を構えた時にカメラを動かすとどちらも機能する為、動作がおかしくなります。

そこで銃を構えている時にフラグを立て、壁対策のカメラの動きをしないようにします。

銃を構えるのをやめた時はフラグを下ろし、壁対策のカメラが機能するようにします。

銃を構えた時にカメラの移動する位置(カメラのローカル座標)をあらかじめフィールドとして用意しておきます。

isWaitShotMoveは銃を構えているかどうかで、銃を構えている時は壁対策用のカメラの動きはしないようにします。

Updateメソッドでカメラを動かす処理

Updateメソッド内に実際にカメラを動かす処理を記述します。

isWaitShotMoveがfalseの時は銃を構えていない状態なので通常の壁対策ようのカメラの動きを行います。

壁と接触していない時は元の位置に戻るように作成していました。

isWaitShotMoveがtrueの時は銃を構えている時の処理で今回追加した部分です。

壁対策のカメラの処理と同じでカメラの位置を徐々にターゲットの位置に動かしているだけです。

isWaitShotMoveがfalseになればifの最初の処理が実行されるので、カメラを元に戻す処理を新たに記述する必要はありません。

SetWaitShotMoveメソッド

isWaitShotMoveフラグのセットをするメソッドを追加します。

bool値を受け取って設定するだけです。

カメラの移動機能を呼び出す個所を追加

これでカメラの移動スクリプトが完成したので、次はこのスクリプトの機能を呼び出す処理を追加します。

主人公キャラクター操作スクリプト等で銃を構える、銃を構えるのをやめるという処理がUpdateメソッドにあると思いますが、そこでCheckObstaclesスクリプトのSetWaitShotCameraでフラグを切り替えるだけです。

↑のように銃を構えている状態の処理で銃を構えるのをやめたらcheckObstacles.SetWaitShotCamera(false)で銃を構えるのをやめた事を知らせ、

銃を構えた状態の時はcheckObstacles.SetWaitShotCamera(true)で銃を構えている状態であることを知らせます。

キャラクター操作スクリプトではこの切り替えをするだけです。

バイオハザードカメラ2

上が実行結果です。
容量の関係でカメラが寄る場面のみになります。

今までの機能と合わせて、これでほぼバイオハザードの出来上がりです!

(;一_一)

まぁ・・・それはないとしてもモドキぐらいのゲームは作れるんではないでしょうか?(^_^;)

スポンサーリンク

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

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