Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。0今回はUnityで敵が見回りをしている最中に敵のサーチエリア内に主人公が侵入しても敵の視覚に入っていない場合は主人公を発見出来ないようにしていきたいと思います。敵のサーチエリア内に入ったら主人公を追いかける機能はUnityで主人公キャラが近づいてきたら追いかける敵キャラを作るUnityで主人公キャラクターが敵キャラクターに近づいたら敵が主人公に近づいてくるようにしたいと思います。13:11で作成した敵の機能を使います。上のような感じになります。敵のサーチエリア(コライダ)内に主人公が侵入していますが敵の視覚内に入っていない時は主人公を発見出来ません。サーチエリア内の敵の視覚に入ったら敵が主人公を追いかけてくるようになります。今回作成する機能は先ほどの記事で作成したものをちょこっと変更するだけなのですぐに出来ます。Emptyで空のゲームオブジェクトを作成し名前をSearchAreaとします。Colliderを取り付け、コライダのサイズを調整します。主人公をサーチするのはコライダで行います。実際に作成したコライダは上のようになりました。主人公をサーチするスクリプトの変更SearchAreaゲームオブジェクトには主人公をサーチするスクリプトを取り付けます。searchArea.radius);}#endif}インスペクタで敵の操作スクリプトであるonlyForwardSearchEnemy、主人公を検知するコライダ、敵の視覚の角度を指定出来るようにします。敵の操作スクリプトがOnlyForwardSearchEnemyとなっていますが、これはわたくしの都合上そうなっているだけなので気にしないでください。OnTriggerStayメソッドはSearchAreaのコライダに他のコライダが入ってきた時に呼ばれます。ここでOnTriggerEnterにしていないのは主人公がコライダ内に入っても視覚内にいない場合は敵から発見されませんが、視覚内にコライダから出ずに入った時も発見されるようにする為です。OnTriggerEnterはコライダに侵入した時しか呼ばれないのでコライダ内で視覚外から視覚内と移動した時の判定をする為にOnTriggerStayを使用しています。主人公のゲームオブジェクトにはPlayerタグを設定しておき、侵入したコライダのゲームオブジェクトがPlayerタグだった時に処理をしていきます。otherが侵入したコライダなので、そのコライダの位置(主人公の位置)から自身の位置(敵の位置)を引いて敵からみた主人公の方向ベクトルを計算します。Vector3.Angleを使用して敵の前方と主人公の方向の角度を計算します。Vector3.Angleは0~180度の数値が返ってきます。Unityの角度計算メソッドをわかりやすくするサンプルの作成Unityの角度計算メソッドの使い方をわかりやすくする為にシーンビューでゲームオブジェクトを動かして計算された角度を視覚的に確認出来るサンプルを作成していきます。20:28計算した角度が指定した角度内だった時に主人公を発見したということにしています。これで主人公が敵のサーチエリアに侵入した時で敵の視覚内の時だけ発見したことに出来ます。OnTriggerExitはサーチエリアのコライダから他のコライダが出ていった時に呼び出されるので、そこでPlayerタグを持つコライダだったら敵を待ち状態に変更します。OnDrawGizmosはシーンビューにギズモを表示するメソッドで、マイフレーム呼ばれます。Handles.DrawSolidArcで敵の視覚を扇で表示しています。DrawSolidArcの第1引数は扇の中心位置、第2引数は表示する表面の方向、第3引数は扇の表示を開始する方向、第4引数は扇の角度、第5引数は扇の半径を指定します。第3引数で行っているのは扇を開始する方向の調整で視覚の角度に応じて表示する方向を変更しています。transform.forwardとすると敵の前方から扇が表示されるので、敵の前方の左右に均等に扇が表示されるよう表示される方向を前方のマイナス方向にずらしています。第4引数でsearchAngleを2倍しているのは左右にsearchAngle分の扇を表示する為です。第5引数ではサーチエリアのコライダの半径を渡してサーチエリアのコライダとサイズを合わせています。OnlyForwardSearchスクリプトのインスペクタでコライダなどを設定しないとコンソールにエラーが表示されるので気を付けてください。敵の視覚外でも距離に応じて発見する敵の視覚内に侵入した時だけ主人公を発見出来るようにしましたが、視覚外でも角度によって発見する距離を変えるというのも出来そうですね。{Debug.Log("主人公を発見2");}}}}上では視覚外の時は主人公と敵の距離がサーチエリアのコライダの半径の半分以下だった時は発見するようにしています。終わりにコライダだけで侵入を検知する事も出来ますが、視覚内や距離に応じて検知する方がよりリアルな感じに出来ますね。ダークソウルのバックスタブのような機能を作りたい時は敵の視覚を作っておくと敵に発見されずに後ろから近づけそうですね。主人公の移動速度も考慮する必要があるかも。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ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ゲームの作り方(かめくめ).。