2017-11-03 8 views
0

グリッドに他の場所がなくなったら、プレイヤーの隣にモンスターを出現させようとしています。これは、32の場所が36の場所で占有された後を意味します。私はモンスターが私の上で産卵するのを防ぎ、お互いに産卵するのを防ぐためにループを使用しています。プレイヤーの隣にモンスターの産卵を防止する

私はこの方法で試したことは、プレイヤーの隣人をチェックすることですが、それはまだプレイヤーの隣に産まれ続けます。

// re-roll for reasons: 
     // 1. can't be on top of player 
     // 2. x and y is occupied 
     while((randomX == selectedUnit.GetComponent<Unit>().tileX && randomY == selectedUnit.GetComponent<Unit>().tileY) || 
      occupationArray[randomX, randomY] == true) { 

      //TODO if monsterList < 32 then monsters shouldn't spawn next to player 
      if (monsterList.Count < 32 && 
       ((randomX == selectedUnit.GetComponent<Unit>().tileX && // x=0 y= 1 || -1 
       Mathf.Abs(randomY - selectedUnit.GetComponent<Unit>().tileY) == 1) || 
       (Mathf.Abs(randomX - selectedUnit.GetComponent<Unit>().tileX) == 1 && // x= 1 || -1 y=0 
       randomY == selectedUnit.GetComponent<Unit>().tileY))) { 

        randomX = Random.Range(0,6); 
        randomY = Random.Range(0,6); 
      } else { 
       randomX = Random.Range(0,6); 
       randomY = Random.Range(0,6); 
      } 
     } 
+0

'(ランダム)'パフォーマンスの面でかなり悪いですしながら。プレイヤーからのランダムな角度と最小距離を指定して位置を決定し、その点に最も近いグリッド位置を見つけることを検討しましたか? –

+0

か、タイルを反復するだけで、そのタイルにモンスターをスポーンすることができますか? –

+0

モンスターはタイルの上にスポーンされ、プレイヤーの近くで産卵する前に他の場所にスポーンしたいと思います。 – chazefate

答えて

0

あなたのwhileループは、プレイヤーの位置またはモンスターの職業のみをチェックしますが、プレイヤーまでの距離はチェックしません。 したがって、最初のランダムな位置がヒットした場合にのみ、算術部分を入力します。 あなたはwhileループの距離計算部を作成する必要があり、ランダムループに固執する場合:

while((randomX == selectedUnit.GetComponent<Unit>().tileX && 
    randomY == selectedUnit.GetComponent<Unit>().tileY) || 
    occupationArray[randomX, randomY] == true || 
    (monsterList.Count < 32 && DistanceToPlayer(randomX, randomY) == 1)) { 
       randomX = Random.Range(0,6); 
       randomY = Random.Range(0,6); 
     } 
関連する問題