読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

衝突判定を無視する方法

Unity

あるGameObjectでは判定してほしいけど、もう一方のGameObjectで判定してほしくない場合の方法。

Layerを使う方法

衝突判定を無視したいGameObjectにLayerを設定。

スクリプトで次のようにする。

// LayerIDを取得
int layer1 = LayerMask.NameToLayer("Hoge");
int layer2 = LayerMask.NameToLayer("Foo");
// 衝突を無視するように設定
Physics.IgnoreLayerCollision(layer1, layer2);

この場合はHogeとFooというLayer同士の衝突を無視します。

この処理は最初の1回だけやっておけば有効になります。

LayerのIDは直接数値で指定してもいいのですが、個人的にコードから何のことかが読み取りにくくなるので名前からIDを取るようにしています。

Colliderを使う場合

こっちは試してないですが、Physics.IgnoreCollision というのがあり無視したいColliderを指定する感じです。

参考

http://docs-jp.unity3d.com/Documentation/ScriptReference/Physics.IgnoreLayerCollision.html

http://docs-jp.unity3d.com/Documentation/ScriptReference/Physics.IgnoreCollision.html