2017-07-18 17 views
2

私はUnityでゲームを作っています。ランダムな位置に(円)GameObjectsをインスタンス化しています。うまく動作します。私がしようとしているのは、GameObjectsと重複しない位置でのみインスタンス化することです。私がインターネット上で見つけた解決策は私の問題を解決しなかったので、どうすればいいですか?これは可能ですか?ランダムな衝突のない位置でGameObjectをインスタンス化する方法は?

答えて

2

サークルのスペースがあるかどうかを検出するには、コライダーまたは数式/ボリュームのどちらかの式を使用する必要があります。しかし、どちらを使っていても、領域をサンプリングしてサークルを生成できるかどうかを判断するために、位置(x、y、z変換)を参照する必要があります。

次のいずれかを行うことができます:あなたはnormalyが、存在する場合、衝突がすぐにオブジェクトを破壊してしまうよう

  1. は、オブジェクトを作成します。その後別のものを生み出す。
  2. spawnerのゲームオブジェクトを、上記と同じチェックを行う場所に移動します。ただし、サークルの余地があると判断された場合にのみスポーンします。 (edit)スポンサーを無効にするか、移動すると、これらのオブジェクトのうちの1つだけがあなたのすべてのスポーンを行うために必要となります。
  3. クラスが事前定義された位置の配列(ベクトル3またはシーン内の既存のゲームオブジェクト)から円を描くかどうかを確認し、上記のチェックの1つを実行します。

これは、ユーザーのニーズと重複の可能性によって異なります。

希望します。

+1

方法2は優れていますが、GOの不要なインスタンス化/破壊を避けるために改良する必要があります。スポイナーは階層内のゲームオブジェクトで、破壊されず、正しい半径のサークルコライダーを持ちます。新しいランダマイズされた位置を 'Transform'に送り、その位置が他のオブジェクトから解放されているかどうかをチェックすることによって使用されます - もしそうなら、新しいゲームオブジェクトをインスタンス化することができます。 。 – Galandil

+0

私が同意すると、2番はメソッド1よりもずっと良くなり、無駄が少なくなります。私は、spawnerオブジェクトを適切なスポーン位置であるかどうかを確認するために移動させるという解決策が好きです。それは私が第3のポイントで行くところのようなものですが、より良い考えを通しています。 –

+1

お返事ありがとうございます!方法番号2は、私のニーズを最もよく満たしています。 だから私は透明なgameObjectを作成し、産んだときにcoliisionがなければ透明なものを破壊し、そのものを実際のものにします。衝突があった場合は、逆に1つを破棄し、別の位置で試してください。私は正しい? –

関連する問題