2017-04-24 8 views
12

メッシュがランタイムに(常に)メッシュに多くの頂点があり、同時にGameObject - プレーヤーがあり、実行時に生成された領域にイベントをトリガする必要がある場合メッシュ。実行時にメッシュコライダーを更新するための代替手段はありますか?

このゲームのカメラは3Dですが、このメッシュはフラットです。私が添付した図面では、どのように見えるかを上から見えるようにこれを上から見ています。

私は数秒ごとにメッシュコライダーを更新しますが、生成されたメッシュがより多くの頂点を持つと、非常に遅いです。

これは非常に単純な衝突方法なので、動的に生成されたメッシュに添付されているメッシュコライダーの代わりにこれを検出する他の方法があると思いますか?

UPDATE#1

私はメッシュ衝突が非常に遅いと実行時に更新されるべきではないことを知っています。私はまた、ボックスコライダーのようなプリミティブを使うべきアイデアを知っています。

この状況では、このフラットメッシュが毎秒更新されて(それが成長すると)何千ものボックスコライダーとなり、1秒ごとに追加する必要があります。この方法も機能しません。

UPDATE#2

私の第二の考えはプレーヤーに最も近い三角形を見つけて(箱コライダーが最速でなければなりません)彼らのためにコライダーを作成することです。しかし、私はどこから始めなければならないのか、それとも可能なのか全く分かりません。誰か?

Drawing 2, as an answer for @Hristo

Drawing

+0

あなたの状況に何を示唆するべきか分かりませんが、メッシュ衝突者を更新することは望ましくありません。*(回転、スケーリング、翻訳も問題です)。正確にあなたが助けを探しに来た理由:それは再計算するために地獄として高価です。 – Draco18s

+0

うん..私は知っている.. :(。箱のコライダーを使用することも解決策ではありません。何時間も後に何千ものボックスコライダーになるので、パフォーマンスには悪いと思います。/ – seek

+0

メッシュには、このような効果を得るために 'LineRenderer'を使用することはできませんか? – Hristo

答えて

0

あなたはレイキャスティングを使用することができます - それは、通常、コライダーが必要ですが、私はあなたがあなたのケースで使用することができます信じているthis(コライダーせずに、メッシュ上にレイキャスティングのためのスクリプト)を、見つけました。

次に、生成されたメッシュに目に見えない背景を導入し、最初にヒットしたものをレイキャスティングで検出できます。あなたのプレイヤーが四角いままであれば、4つのコーナーからレイを投げることができます。そして、4つのすべての光線がメッシュに当たったら、あなたはその上にいます。

オーバーラップの場合、リンクからのコードは同じレイによってヒットした複数の三角形を検出できるため、ヒットしたトライアングルの数が1より大きい場合、オーバーラップしていることがわかります。そして、あなたはおそらくその注文をz-indexの一種として使うことができます。

私はコードを試していませんが、他の人のために働いたようです。お役に立てれば!

関連する問題