Player의 현재 위치를 기준으로 주위에 랜덤하게 스폰하였는데, 여러 문제가 발생하였다.
문제 1. 맵 바깥에 생성
문제 2. 아이템, 장애물 오브젝트나 Enemy와 충돌되는 위치에 생성
Player의 위치를 기준으로 스폰하지 않고, 맵에서 Player가 움직이는 공간의 중앙을 기준으로 플레이어 전방의 랜덤한 위치에서 생성. Physics.OverlapSphere를 통해 스폰하려는 위치에 지정한 Layer(Player, PlayerClone, Enemy, Objects)가 minDistance 내에 있는지 확인해서 스폰 위치 결정
private Vector3 GetValidSpawnPosition()
{
int attempt = 10;
while (attempt > 0)
{
float randomX = Random.Range(-spawnRange, spawnRange);
float randomZ = Random.Range(1, spawnRange);
Vector3 randomPosition = spawnPoint.position + new Vector3(randomX, 0, randomZ);
randomPosition.y = spawnPoint.position.y;
Collider[] colliders = Physics.OverlapSphere(randomPosition, minDistance, collisionLayerMask);
if (colliders.Length == 0)
{
return randomPosition;
}
}
return new Vector3(0, 0, -spawnRange);
}