私は敵のビジョンコーンを計算しています。プレイヤーがその中にいる場合は、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に、ガードは方向に関係なく、指定した距離内でのヒットがなければならないことを意味し、メッシュで囲まれていること
の点に注意してください。彼らのレイヤーマスクには、しかし、それらを模倣することは役に立たず、率直に言って私はそれがどうなるか分からない。
あなたのゲームはトップダウンまたはサイドスクロールですか?あなたは常に光線を右側に送るので、私は尋ねています。あなたはプレーヤーから敵に正規化されたベクトルを使用する必要があります。また、Physics2D.Linecastの使用を検討しましたか?私はあなたのケースでもっと簡単になると思う - > https://docs.unity3d.com/ScriptReference/Physics2D.Linecast.html – Cabrra
ねえ、あなたは方向について絶対に正しいです。私は、プレイヤーの指示が私に何も与えていないとき、違った方向で混乱していました。実際の方向を編集して投稿に戻しました。しかし、どちらの方向にも違いはなく、どちらも見つからない。 – user2354664
これをデバッグする最善の方法は、ビジュアルデバッグを使用することです。 RayCastまたはLineCastがその方向の敵からプレイヤーにデバッグラインを描画し、それがどこに向かうのかを確認する直前です。何が起こるか教えてください。 – Cabrra