当网格中没有其他地方时,我试图让怪物在玩家旁边产生。这意味着在32个地方占用了36个地方。我正在使用while循环来防止怪物在我身上产生并阻止它们相互产生。
我在这种方法中尝试的是检查玩家的邻居,但它仍然会在玩家旁边产生。
// 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)
你的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);
}