2017-07-18 33 views
2

我在Unity製作遊戲。我在隨機位置上實例化(圓形)GameObjects,並且效果很好。我正在嘗試做的是僅實例化與其他GameObjects不會重疊的位置。沒有解決方案,我在互聯網上找到解決我的問題,所以我該怎麼辦?這可能嗎?如何在隨機碰撞位置實例化GameObject?

回答

2

好的。爲了檢測您的圓圈是否有空間,您需要使用對撞機或數學/體積公式。但無論你如何操作,你都需要引用一個位置(變換x,y,z)來對一個區域進行採樣,並確定你的圓圈是否可以在那裏產生。

你可以做以下之一:

  1. 創建對象,你normaly會,但如果存在衝突立即銷燬對象。然後再產卵。
  2. 移動一個產卵器gameobject在一個位置,與上面相同的檢查,但只有當它已經確定有一個圓圈的空間,你產卵它。 (編輯)然後禁用或移動spawner,你將只需要其中的一個對象來完成你所有的產卵。
  3. 讓無論哪個班級產生圓圈從預定義位置陣列(場景中的矢量3或現有的遊戲對象)中選取,然後執行上述其中一項檢查。

這取決於您的需求以及重疊的可能性。

希望它有幫助。

+1

方法2比較好,但爲了避免不必要的實例化/銷燬GOs,方法2應該得到改進 - spawner是層次結構中的遊戲對象,它永遠不會被破壞,它有一個正確半徑的圓形對撞機,它是通過將新的隨機位置提供給它的'Transform'來檢查這個位置是否沒有其他物體 - 如果是的話,那麼你可以實例化新的遊戲對象,如果沒有,則選擇另一個隨機位置,直到獲得一個自由的位置。 – Galandil

+0

我同意,第二個比方法1更好,更少浪費。我喜歡你的解決方案,讓spawner對象四處移動以檢查它是否是合適的產卵位置。這是第三點,但更好地思考的地方。 –

+1

謝謝你的回答!方法2號我的需求最好的套房。 所以你的意思是我創建一個透明的遊戲對象,如果在生成時沒有大腸桿菌感染,請破壞透明遊戲對象並在那個位置產生真正的遊戲對象。如果發生碰撞,請刪除transaprent,並嘗試其他位置。我對嗎? –