Unityに関連する記事です

 索敵範囲のコライダーにEnemyタグがついていると、Playerが攻撃を行った際に、敵本体のコライダーだけではなく、索敵範囲や香華範囲といったコライダーまで
接触判定として拾ってしまうケースがあります。

索敵範囲のコライダー画像




対策

1.索敵範囲などのゲームオブジェクトのTagをEnemy以外に変更する


 Playerの武器による接触判定ではOnTriggerEnterメソッドを利用しており、その処理の中でTagによって「どのゲームオブジェクトと接触したか」を分岐しています。
索敵範囲用のゲームオブジェクトのTagがEnemyになっていると、この処理が通ってしまって、敵本体のコライダーに加えて、
索敵範囲のコライダーも敵であると誤判定してしまい、ダメ―ジ処理が行われてしまいます。

 そのため索敵範囲のコライダーのTagはEnemyではなく、他のTagにすることでこの現象を回避できます。Untagged (Tag設定なしの状態)でもよいですし、
新しく SearchArea といったTagを作成して、それを索敵範囲のゲームオブジェクトに設定すれば、OnTriggerEnterメソッドでの誤判定を防ぐことができます。






2.Layermaskを変更する


 UnityではTagの他にLayermask(Layer)と呼ばれるマスキング処理が設定できます。ゲームオブジェクトへの設定場所は名前の下です(Tagの左側)。

ゲームオブジェクトのLayerの設定場所(インスペクター内)



 Layermaskの新規の登録方法も同じで、このゲームオブジェクトのLayer設定の部分で Add Layer を選択すれば、任意の名前でLayerを登録できます。
 
 Layerには Layer Collision Matrix と呼ばれる設定があり、どのLayer同士が接触するのか、あるいは接触しないのか、という部分をチェックボックスで設定できます。

 設定場所はUnityのメニューから Edit => Project Settings を開いてポップアップを開きます。
ポップアップの左側のメニュー内の Physics (あるいは Physics2D) を選択し、右側の詳細情報をPhysicsの内容に切り替えます。


ProjectSettingsの開き方 動画
https://gyazo.com/d441ced3cf88c346dd0c436aa34d7aef


 この項目の最下段に Layer Collision Matrix の設定箇所があります。基本的にはすべてのLayer同士のチェックが入っている状態で、接触する状態になっています。
ここでLayer同士の名前を見て接触させたくないLayer同士のチェックを外します。これでこのLayer同士では接触判定が発生しなくなります。

 下記の画像では、Weapon と SearchArea のLayerのチェックを外していますので、このLayer同士の間では接触判定を発生しないように設定しています。


Layer Collision Matrix画像


 
 Layer Collision Matrixの設定を変更したら、この設定を利用したいゲームオブジェクトのLayerを変更しておきます。




<スクリプトから動的にTagやLayerMaskを切り替える方法>

 
Tagの変更方法

// Tagの文字列を設定
string tag = "Player";

// Tagを変更したいゲームオブジェクトのTagを指定して変更する
gameObject.tag = tag;


Layerの変更方法

// Layerの文字列を設定
string layerName = "SearchArea";

// Layerを変更したいゲームオブジェクトのLayerを指定して変更する
gameObject.layer = LayerMask.NameToLayer(layerName);

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます