2017-06-07 30 views
0

私はゲームオブジェクトがビューを遮断何もせずに別のゲームオブジェクトを見ることができるかどうかを確認する機能を持っている:レイキャストを無視する方法トリガーコライダーを無視しますか?

public bool CheckVision(GameObject target) 
{ 
    RaycastHit2D ray = (Physics2D.Raycast(transform.position, target.transform.position - transform.position, m_VisionRange)); 
    if(ray.collider.name == target.name) 
    { 
     Debug.DrawRay(transform.position, target.transform.position - transform.position); 
     return true;    
    } 
    else 
    { 
     return false; 
    } 
} 

唯一の問題は、私はそれが「isTrigger」とコライダーと衝突したくないということですフラグセット;私はレイキャストがそれらを無視することを望む。何か案は?

+2

トリガーコリダーを別のレイヤーに配置し、レイヤーマスクを使用してレイキャストがそのレイヤーに何も衝突しないようにすることを検討しましたか? – Serlite

答えて

0

Unity、チェックボックスは「Raycasts Hit Triggers」と呼ばれます)

実際にはバージョン5.2.0f3ではRaycastsとは言わなくなりました...「クエリヒットトリガー」と表示されます。レイキャストがトリガーを通過するようにするにはチェックをはずしてください衝突者。

0
であなたのトリガーゲームオブジェクト層を変更

レイキャスト無視するか使用LayerMask https://docs.unity3d.com/ScriptReference/LayerMask.html

int targetLayer = 1 << LayerMask.NameToLayer("Target Layer"); 
public bool CheckVision(GameObject target) 
{ 
    RaycastHit2D ray = (Physics2D.Raycast(transform.position, target.transform.position - transform.position, m_VisionRange, targetLayer)); 
    if(ray.collider.name == target.name) 
    { 
     Debug.DrawRay(transform.position, target.transform.position - transform.position); 
     return true;    
    } 
    else 
    { 
     return false; 
    } 
} 
6

レイヤーマスク操作は、このために必要ないです。トリガーとしてマークされたColliderを無視するだけの場合は、レイヤーを使用する必要はありません。この操作はUnity 5.2以降で組み込まれています。

。3Dの場合、QueryTriggerInteraction.IgnorePhysics.Raycast関数に渡します。

int layer = 1 << LayerMask.NameToLayer("Default"); 
Physics.Raycast(cameraRay, out hit, distance, layer, QueryTriggerInteraction.Ignore); 

.FOR 2Dあなたはそれがトリガーを検出しない場合、falsePhysics2D.queriesHitTriggersを設定します。もう一度トリガーを検出したい場合は、trueに設定してください。 Physics2D.Raycast関数を呼び出す前に必ず設定してください。

トリガを検出しない:

Physics2D.queriesHitTriggers = false; 

は、トリガを検出:あなたは、2Dバージョンの

Physics2D.queriesHitTriggers = true; 

探しています。


私はバグですが、私はそれが今で固定されているとユニティのいくつかの特定のバージョンで動作していないこのの報告を見てきました。そうでない場合は、l1stenに記載されているようにレイヤーを使用します。

[編集]> [プロジェクト設定>物理学>のチェックを外しあなたがの古いバージョンを使用している場合(

を「クエリがトリガーのヒット」:あなたのraycastsは5.2のすべてのトリガコライダーに行く無視していると

+0

ありがとう、あなたは、私は統一設定でこれを変更する必要があると言う人もいます。コード内で変更する方が良いですか、それとも重要ですか? – sparpo

+0

本当に問題ではありません。コードから実行することで、ランタイム中およびスタンドアローンビルドで有効にしたり無効にしたりすることができます。あなたはエディタからそれを行うことはできません。それが唯一の違いです。 – Programmer

関連する問題