Unityの敵キャラの当たり判定を細かくしてよりバイオっぽくする

前回までに作ったガンシューティングの機能で敵を攻撃する事が出来るようになりました。

Unityでバイオハザード風ガンシューティングの機能を作ってみます。今回は銃を構えた時にレーザーポインターの表示とシューティングポイントの表示、銃を撃った時に光を表示してみたいと思います。
Unityのゲームで初期のバイオハザード風に上半身の角度を変え、照準を合わせるような機能を作成していきます。

が、シューティングポイントの当たっている部分が何もない空間に浮いているように見えてしまいます!

これは敵の当たり判定はCharacterControllerのコライダを使っており敵を包むような空間(大ざっぱな当たり判定)になる為、シューティングポイントはコライダの接触したポイントになってはいますが、空中に浮いているように見えてしまいます。

これでは大雑把な当たり判定のアクションゲームになってしまいますので、当たり判定個所を細かく分けて設定するようにしましょう。

どこに当たったかによって得点を変えたり、与えるダメージを変更したりすることも出来ます。

と言っても特別難しい事はしません(今までやってきた方にとっては)。

スポンサーリンク

体の部位によって細かく当たり判定を作る

それではやってみましょう。

敵キャラの体のそれぞれの部分にCreate Emptyで空オブジェクトを作り名前を設定します。
そしてそれぞれの部位の形にあったコライダを追加します。

ボーンの子要素にあたり判定コライダを作成

↑のように手や足、胴体といったボーンの子要素に当たり判定部分を作成していきます。

コライダの位置と角度をそれぞれの部位と合わせます。

当たり判定にEnemyHitタグとレイヤーを設定

コライダはIs Triggerにチェックを入れスクリプトから使うようにし、物体としては存在しないものとします。

今回設定した敵キャラは腕はひじからよく曲がるのでひじから上と下にわけました。

また当たり判定に使うものはすべてTagとLayerをEnemyHitに変更します(両方とも作成してください)。

こうすることで銃の当たり判定で

Hit名前

のそれぞれの部分が攻撃の当たり判定に使われます。

Tagを指定したのは剣で攻撃した時に当たり判定のコライダかどうかの判別に使う為です。

敵の当たり判定を細かく設定した画像

上のような感じで当たり判定部分を設定しました。

なんだか段ボールを使って作ったヒーローみたいになってますね・・・・。

とりあえず試してみましょう

バイオ17

↑のようにかなり細かく当たり判定が出来るようになりました。

他のスクリプトの修正

今までは敵に設定したCharacterControllerを当たり判定にしており、敵にはEnemyタグとEnemyレイヤーを設定していました。

しかし、今回敵の子要素に当たり判定を細かく分けた為、当たり判定の処理を変更する必要があります。

まずはShotスクリプトの銃を撃った時の当たり判定を修正します。

敵との当たり判定でEnemyレイヤーを指定していた箇所をEnemyHitに変更します。

次に敵のEnemyスクリプトを取得していた箇所は親のEnemyスクリプトを取得する必要があるので、

↑のようにrootまで遡ってEnemyスクリプトを取得します。

次は剣の攻撃の当たり判定を処理しているAttackSwordスクリプトです。

タグをEnemyからEnemyHitに変更します。

このまま実行すると剣が敵の親のCharacterControllerとしか接触判定が出来ません。

そこで剣のプレハブにRigidbodyを取り付けIs Kinematicにチェックを入れます。

剣のプレハブにRigidbodyを取り付ける

こうすることでEnemyHitとの当たり判定をする事が出来ます。

最後に敵のアニメーションイベントを受け取るProcessAttackスクリプトを修正します。

敵の子要素に当たり判定用のSphereColliderを取り付けたので、階層から手の攻撃用コライダを取得するのが面倒になりました。

そこで、敵の手の攻撃用コライダをインスペクタで設定出来るようにします。

当たり判定のコライダを増やしての感想

これで当たり判定を細かくする処理は完了です。

剣で攻撃する場合に敵の当たり判定部位と接触する度に攻撃がヒットする為、1回の剣の振りで、手、体、足の三か所に当たる可能性があります。

その為、剣の攻撃力を少し抑えた方がいいかもしれませんね。(^_^;)

ボーンの稼働域とHitコライダを設置する位置が合っているか確認するには、Unityの実行ボタンを押して、
Sceneタブに切り替え敵キャラを選択してスクリプトで歩かせてみるとわかりやすいです。

敵キャラの動きによってコライダの動きも同じように移動、回転しているかどうか確認出来るので間違いがないです。

言っている本人が確認出来ていなかったという落ちになります。(-.-)

スポンサーリンク

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

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