2017-11-13 10 views
0

こんにちは私はRaycastAllを使用してlayermasksとレイキャスティングがどのように動作するかについて小さな質問をしています。Raycasting Layermask vs RaycastAll

私は私のオブジェクトの内側からレイを投影しようとしていて、元のオブジェクトと同じレイヤーにレイがレイラマスクしているので、元のオブジェクト自体の "ヒット"を無視する必要があります。

私の質問は:レイキャスティングがレイラマスクを使用するときに、他の望ましくないレイヤーとの衝突を登録して単純に無視するか、最初にそれらのレイヤーとの衝突を登録しないか?レイキャスターを使用してレイヤーに論理的に応答するか、厳密にレイヤーマスクを使用するかどうかを判断すると、パフォーマンスが悪化するか同等になるか?それともそれほど大きな違いではないでしょうか?

私は、「あなたがオブジェクトの内側からそれをキャストすると、そのオブジェクトと衝突しません」と言う記事を知っていますが、明らかにそうです。

おかげ

答えて

2

あなたはofficial Unity's physics preformance tutorialを見てみることができます。まず、レイキャストはかなり安い操作ですが、パフォーマンスは実際にレイキャスティングをどのように実際に行うかによって決まります。たとえば、あなたの質問の1つ - RaycastAllは別のレイヤー上でレイキャストを行うよりも高価ですが、それは上記のリンクでも言及されています。実際に物理学がどのように機能するかに基づいています。 Unityは物理学そのものを実装するのではなく、既存のソリューションを使用します(PhysiX for 3dのように、それ以前は第2d物理学のBox2dでした)。

レイの長さもレイキャストのパフォーマンスに影響します。短いレイは、より良いパフォーマンスを発揮します。最悪の場合はレイキャスティングで無限になります。もう一つのケースは、Collider.RaycastがPhysics.Raycastより安いということです。

ゲーム開発の物理学の背後にあるいくつかの数学的方程式があるので、あなたはそういうことになるかもしれないということは秘密ではありません。あなたが持っている方程式は単純ですが、レイキャストは線の方程式(実際のRaycast)といくつかの方程式を持つ方程式のシステムとして扱うことができます。方程式はいくつかの平面/空間の2D/3Dオブジェクトを記述します。ライン(Ray)および他のオブジェクトを含む。

ゲームに複雑な物理現象がない場合、レイマスターとのレイキャストとレイキャストの違い、またはレイの長さが短いことはありませんが、パフォーマンスは実際とは異なります。

+0

返信いただきありがとうございます。物理学は私のゲームでは非常に簡単なので、私は正直なところ、パフォーマンスの違いに気付かないと思っていますが、私はraycastスクリプトを一度に実行する(極端ではない)方法。しかし、レイディキャストはどのようにして(2D)から放射されるコライダーを無視し、すべてが同じレイヤーにある場合に最も効率的な方法で隣接オブジェクトと衝突するのか? (RaycastAllが最善の選択ではないと仮定して) –

+0

たとえば、RaycastHitでオブジェクトを取得したときに、最も簡単な解決策の1つを無視したいオブジェクトにアタッチされたスクリプト内にレイをキャストすると、オブジェクトそのもの。しかし、それは本当にあなたのゲームのオブジェクトをどのように整理するかによって異なります。たぶん別のレイヤーにオブジェクトを設定したり、異なるz座標からレイをキャストしたりできます(それは2dのレイキャストに影響します) – vmchar