2016-08-14 10 views
1

私は敵のビジョンコーンを計算しています。プレイヤーがその中にいる場合は、Physics2D.Raycastとの間にコライダーがあるかどうかを確認しようとします確かに、敵は壁を通してプレイヤーを見ない。Physics2D.Raycastが何も見つからない

見ることができない壁はメッシュからのもので、メッシュコライダーが取り付けられています - see this pic。彼らはまた私がレイキャストを制限しようとしている特定の層にあります。

私のコードはかなり簡単です。敵がプレーヤーに面していて、プレイヤーが十分に近い場合は、レイキャストを発射します。

if (distanceToPlayer < viewDistance && dirToPlayer == dir) { 
    // player is in cone, check for collision 
    LayerMask lm = LayerMask.NameToLayer ("WallCollisions"); 

    RaycastHit2D hit1 = Physics2D.Raycast(transform.position, (player.transform.position - transform.position).normalized, 1000, lm.value); 
    RaycastHit2D hit2 = Physics2D.Linecast (transform.position, player.transform.position); 

    return true; 
} 

ヒットを検査するためにreturn文に破壊すると、それは常に次のようになります。

{UnityEngine.RaycastHit2D} 
centroid: {(0.0, 0.0)} 
collider: (null) 
distance: 0 
fraction: 0 
normal: {(0.0, 0.0)} 
point: {(0.0, 0.0)} 
rigidbody: (null) 
transform: (null) 
Non-public members: 

何も見つからなかったことを意味します。また

、私は多くの人がbyteshiftingん見てきました.. PICに、ガードは方向に関係なく、指定した距離内でのヒットがなければならないことを意味し、メッシュで囲まれていること

の点に注意してください。彼らのレイヤーマスクには、しかし、それらを模倣することは役に立たず、率直に言って私はそれがどうなるか分からない。

+0

あなたのゲームはトップダウンまたはサイドスクロールですか?あなたは常に光線を右側に送るので、私は尋ねています。あなたはプレーヤーから敵に正規化されたベクトルを使用する必要があります。また、Physics2D.Linecastの使用を検討しましたか?私はあなたのケースでもっと簡単になると思う - > https://docs.unity3d.com/ScriptReference/Physics2D.Linecast.html – Cabrra

+0

ねえ、あなたは方向について絶対に正しいです。私は、プレイヤーの指示が私に何も与えていないとき、違った方向で混乱していました。実際の方向を編集して投稿に戻しました。しかし、どちらの方向にも違いはなく、どちらも見つからない。 – user2354664

+0

これをデバッグする最善の方法は、ビジュアルデバッグを使用することです。 RayCastまたはLineCastがその方向の敵からプレイヤーにデバッグラインを描画し、それがどこに向かうのかを確認する直前です。何が起こるか教えてください。 – Cabrra

答えて

0

これで解決しました。将来的には、メッシュ衝突者が3Dであるため、Physics2Dレイキャストはそれを見つけられません。すべてを解決したポリゴンコライダーを使用します。

関連する問題