2017-06-05 6 views
2

私はUnityの初心者です!Unity3d 2D Raycastが多分PolygonCollider2Dのポイントを通過します。

Raycast2Dコールからの光線が、時にはPolygonCollider2Dのポイントを通過することがあり、その理由がわかりません。

ヒットは、次の画像で小さな黄色の水平線でマークされています。

予想される動作:

Image: working

を通る光線:ここ

image: not working

は私のコードである:

pathはPolygonCollider2Dの赤い点です)

Debug.DrawLine(origin, new Vector3(path[i].x, path[i].y, 0), Color.yellow, 0, false); 
float angle = Mathf.Atan2(path[i].y - origin.y, path[i].x - origin.x); 
Vector2 direction = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)); 
RaycastHit2D hit = Physics2D.Raycast(origin, direction); 
Debug.DrawLine(new Vector3(hit.point.x, hit.point.y, 0), new Vector3(hit.point.x - .2f, hit.point.y, 0), Color.yellow); 
Debug.DrawRay(new Vector3(origin.x, origin.y, 0), new Vector3(direction.x, direction.y)); 

丸め不良ですか?

もしそうなら、どうすれば修正できますか?

+0

あなたのコライダーを少し上げてみましたか?おそらくあなたの広場の位置にフロートのためです。 – Fiffe

+0

スケーリングは役に立ちません。 – Ploppy

答えて

2

この問題の原因は、浮動小数点精度です。浮動小数点数が関係している場合、正確な比較はできません。人間の目は非常に小さなオフセットに気づくことができないので、これは通常、世界を移動する通常のコライダーを使用している場合は問題ありません。問題は:
ポリゴンコーナーの非常に正確な位置をヒットする必要がありますか?

いいえ:
あなたの解決策はうまくいくようです!

はい場合:あなたは皮膚を追加して、コライダーのサイズを大きくする必要があります
。これは、衝突する可能性を高める方法です。ヒットした場合はヒットポイントを検証して、ヒットが本当にヒットしたかどうかを判断する必要があります。あなたはまだ浮動小数点エラーに遭遇し、おそらく許容誤差距離(スキン幅)を設定する必要があります。私は以下のイメージが私の要点を示すことを望む。この最初の画像で

enter image description here

コライダーを打っていない、あなたのレイキャストの一例です。
私の画像の寸法は、私のポイントを説明するためにオフになっています。ここで

enter image description here

我々はまだのみ1衝突型加速器を使用しているが、我々はそのサイズを増加しています。

浮動小数点演算は正確ではありません。あなたが正確な数学をしたいのであれば、何とか問題を回避する必要があります。この場合の解決方法は、のスキンを追加することです。あなたが多角形のコライダーを使用しているので、これはあまり簡単ではないかもしれません。

+0

あなたが言ったように複雑になる可能性のあるスキンを実装する代わりに、ポイントをわずかに相殺することにしました。 'worldPath [i] = new Vector2(path [i] .x * .99f + this.transform.position.x、path [ i] .y * .99f + this.transform.position.y); 'うまくいくようです。あなたはこのことについてどう思いますか? – Ploppy

+0

確かに、あなたはあなたのコライダーをサイズアップするか、別のレイをキャストする必要があります。しかし、うまくいくはずです:)しかし、あなたの現在の解決策には動的な修正があることに注意してください。コライダーが大きければ大きいほど、補正値は大きくなります。補正は常にポイントの位置の1%になります。それが問題を引き起こすことが判明した場合は、静的な修正を実装する必要があります。 –

+0

説明をありがとうございました。私はあなたの解決策を受け入れます。 – Ploppy

関連する問題