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

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

Unityでバイオハザード風ガンシューティングの機能を作ってみる
Unityでバイオハザード風のガンシューティングの機能を作成していきます。今回は銃を構えそこからレーザーポインタを表示するようにし敵に当たっている時に攻撃ボタンを押すと敵にダメージを与えます。
Unityのゲームでバイオハザード風に照準を合わせられるようにする
Unityのガンシューティングの機能に上半身だけを動かして狙いを敵に定められるようにする機能を追加します

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

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

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

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

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

スポンサーリンク

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

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

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

バイオ14

↑のように手や足、胴体といったボーンの子要素に当たり判定部分を作成していきます。
コライダの位置と角度をそれぞれの部位と合わせます。

バイオ15

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

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

また当たり判定に使うものはすべてレイヤーをEnemyHitに変更し(上の画像ではEnemyになってますが・・・)、tagをそれぞれの部位の名前で作成しておきます。
こうすることで銃の当たり判定で

Hit名前

のそれぞれの部分がレイの当たり判定に使われます。
tagを指定したのは当たった場所がどこだったのかを判定する時に使います。

バイオ16

上のような感じで当たり判定部分を設定しました。
なんだか段ボールを使って作ったヒーローみたいになってますね・・・・。
とりあえず試してみましょう

バイオ17

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

どの部分に当たったかスクリプトで確認出来るようにする

銃の当たり判定のスクリプトでどの部位に当たったか確認してみましょう

どの部位に当たったかタグで判別し、与えるダメージに影響を与える事が出来ます
そうなるとNockBack関数はまた変更しなければいけないですね・・・・。

当たり判定のコライダを増やしての感想&修正個所

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

あまりにコライダを増やすと処理落ちが起きそうですが・・・、どうなんでしょう?
以前から影の設定をオフにしてやってるのでわかりませんが、影があると普通に処理が遅くなりますね・・・。

影自体もあらかじめBakeしておくとどうなんでしょう?
ただこれはコライダを増やしたキャラクターが動いた影響ではなく単なるリアルタイムシャドウの影響だと思われます。

その辺の設定に関してもいずれやるかと思います。

--以降追記--

一部Hitコライダの位置が間違っている個所(HitRightArmUpperの階層位置等)があったので修正します。

コライダ1

さらに細かく当たり判定をする為にBox Colliderであった個所をCapsule Colliderにしたり、首の位置にColliderを設定したり
しています。

胴体部分ではボーンの稼働域と1つのコライダがあっていなかったので、3つに分けてました。

コライダ2

上のようになりました。

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

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

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