Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。1前回までに作ったガンシューティングの機能で敵を攻撃する事が出来るようになりました。Unityでバイオハザード風ガンシューティングの機能を作ってみるUnityでバイオハザード風ガンシューティングの機能を作ってみます。今回は銃を構えた時にレーザーポインターの表示とシューティングポイントの表示、銃を撃った時に光を表示してみたいと思います。14:49Unityのゲームでバイオハザード風に照準を合わせられるようにするUnityのゲームで初期のバイオハザード風に上半身の角度を変え、照準を合わせるような機能を作成していきます。13:39が、シューティングポイントの当たっている部分が何もない空間に浮いているように見えてしまいます!これは敵の当たり判定はCharacterControllerのコライダを使っており敵を包むような空間(大ざっぱな当たり判定)になる為、シューティングポイントはコライダの接触したポイントになってはいますが、空中に浮いているように見えてしまいます。これでは大雑把な当たり判定のアクションゲームになってしまいますので、当たり判定個所を細かく分けて設定するようにしましょう。どこに当たったかによって得点を変えたり、与えるダメージを変更したりすることも出来ます。言っても特別難しい事はしません(今までやってきた方にとっては)。今までの機能作成の流れは以下の記事で確認出来ますので、このスクリプトは何?と思ったら確認してみてください。Unityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。21:43スポンサーリンク体の部位によって細かく当たり判定を作るそれではやってみましょう。Emptyで空オブジェクトを作り名前を設定します。それぞれの部位の形にあったコライダを追加します。↑のように手や足、胴体といったボーンの子要素に当たり判定部分を作成していきます。コライダの位置と角度をそれぞれの部位と合わせます。Triggerにチェックを入れスクリプトから使うようにし、物体としては存在しないものとします。今回設定した敵キャラは腕はひじからよく曲がるのでひじから上と下にわけました。自体にコライダを設定せず空のゲームオブジェクトを作ってコライダを設定した理由はボーンにコライダを設定するとコライダをうまく調整出来ない為です。空のゲームオブジェクトにコライダを設定すれば空のゲームオブジェクトを移動や回転させて敵の部位とコライダを合わせやすくなります。当たり判定に使うものはすべてTagとLayerをEnemyHitに変更します。することで銃の当たり判定でHit名前のそれぞれの部分が攻撃の当たり判定に使われます。Tagを指定したのは剣で攻撃した時に当たり判定のコライダかどうかの判別に使う為です。上のような感じで当たり判定部分を設定しました。なんだか段ボールを使って作ったヒーローみたいになってますね・・・・。今回はタグとレイヤーの両方でEnemyHitを作成しますが、レイヤーだけ作ってスクリプトのタグで判定している個所をレイヤーで判定するようにしても大丈夫です。試してみましょう↑のようにかなり細かく当たり判定が出来るようになりました。当たり判定にしており、敵にはEnemyタグとEnemyレイヤーを設定していました。今回敵の子要素に当たり判定を細かく分けた為、当たり判定の処理を変更する必要があります。剣の攻撃の当たり判定を処理しているAttackSwordスクリプトを修正します。col.ClosestPointOnBounds(transform.position));}}}タグをEnemyからEnemyHitに変更します。このまま実行すると剣が敵のHit系のゲームオブジェクトのコライダとの接触判定が出来ません。CharacterControllerを取り付けたゲームオブジェクトのタグをEnemyHitにするとCharacterControllerのコライダは当たり判定が出来ます。ここら辺はUnityのOnCollisionとOnTriggerイベントの受け取りを検証するUnityのコリジョン(OnCollision)とコライダ(OnCollider)のイベントが呼ばれる為の条件を検証してみました。19:25の記事を参照してください。Kinematicにチェックを入れます。することでEnemyHitとの当たり判定をする事が出来ます。遠距離攻撃である銃を撃った時の処理をしているShotスクリプトの当たり判定を修正します。敵との当たり判定でEnemyレイヤーを指定していた箇所をEnemyHitに変更します(2か所?)。("EnemyHit")次に敵のEnemyスクリプトを取得していた箇所は親のEnemyスクリプトを取得する必要があるので、hit.collider.GetComponentInParent<Enemy>().GetState()123hit.collider.GetComponentInParent<Enemy>().GetState()↑のようにGetComponentからGetComponentInParentにしてEnemyスクリプトを取得します。今回は近接攻撃と遠距離攻撃ともにHit系ゲームオブジェクトを当たり判定の対象にしましたが、銃で細かい部位を狙う遠距離攻撃はHit系のゲームオブジェクトのコライダを当たり判定にし、剣で大雑把に攻撃する場合は敵の移動に使っているCharacterControllerのコライダを当たり判定にするというのもいいかもしれません。敵のボーンに細かくコライダを設定したことで部位ごとに攻撃をすることが出来るようになりました。ここでひとつ問題が発生します。それは主人公が敵のHit系のゲームオブジェクトのコライダの上に乗ってしまうことがあります。HitRightLowerFootゲームオブジェクトのコライダの角度や高さによっては主人公のCharacterControllerの設定によってはその上に乗れてしまいます。そこでレイヤーコリジョンマトリクスを使ってEnemyHitレイヤーと主人公のPlayerレイヤーの接触をしないように設定します。(主人公はCharacterControllerを取り付けた親だけにPlayerレイヤーを設定していることとします)。Settingsウインドウを開きます。MatrixでEnemyHitとPlayerのチェックを外します。これで主人公が敵の上に乗る事がなくなりました。当たり判定のコライダを増やしての感想これで当たり判定を細かくする処理は完了です。剣で攻撃する場合に敵の当たり判定部位と接触する度に攻撃がヒットする為、1回の剣の振りで、手、体、足の三か所に当たる可能性があります。その為、剣の攻撃力を少し抑えた方がいいかもしれませんね。(^_^;)ボーンの稼働域とHitコライダを設置する位置が合っているか確認するには、Unityの実行ボタンを押して、Sceneタブに切り替え敵キャラを選択してスクリプトで歩かせてみるとわかりやすいです。敵キャラの動きによってコライダの動きも同じように移動、回転しているかどうか確認出来るので間違いがないです。言っている本人が確認出来ていなかったという落ちになります。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ2020/01/18個人的にUnity2019.2.18f1をインストールしました。2020/01/01あけましておめでとうございます。(^^)/ユニティちゃんのRPGを作ってみようのPartyStatusスクリプトでpartyMembersのListの型がCharacterStatusとなっていたのでAllyStatusに変更しました。変更したというか、元々AllyStatusに書き換える前のスクリプトを掲載していたので修正しました。ユニティちゃんのRPGを作ってみよう10ーコマンド画面の作成とステータスの表示ーユニティちゃんのRPGでコマンド画面の作成とステータスコマンドを作成し、選択したキャラクターのステータスを表示するようにしていきます。20:00GetPartyStatusメソッドの戻り値もそれに伴って変更しています。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。