유니티 플레이어 주변으로 동그랗게 오브젝트 소환하기

제가 즐겨하는 모바일 게임에서 플레이어 근처에 소환되는 구체들이 멋있길래 한 번 구현해봤습니다.

플레이어를 기준으로 동그랗게 소환되는 방법입니다.

동그랗게 소환~

 

 


코드

public GameObject SpawnObject;
public GameObject go;
    
public int SpawnCount = 10;
public float Range = 5f;
    
   
private void Spawn()
{
    for (int i = 0; i < SpawnCount; i++)
    {
        float angle = i * Mathf.PI * 2 / SpawnCount;
        float x = Mathf.Cos(angle) * Range;
        float z = Mathf.Sin(angle) * Range;

        float angleDegrees = -angle * Mathf.Rad2Deg;
        Quaternion rot = Quaternion.Euler(0, angleDegrees, 0);
        GameObject spawnObject = Instantiate(SpawnObject, new Vector3(x, 0, z), rot);
        pawnObject.transform.SetParent(go.transform);
    }    
}

 

2 * PI(라디안)는 원의 전체 각도인 360도를 뜻합니다.

 index

i는 360도를 기준으로 index처럼 생각하시면 됩니다. i=0일 경우 전체 360도에서 각도 0의 위치에 있음을 뜻합니다.

i = 1인 경우, 전체 360도에서 45도에 위치해 있다고 생각하시면 됩니다.

 

x, y 좌표

 

x좌표를 구하는 방법은 구의 반지름 * cos(theta)입니다.

y좌표를 구하는 방법은 구의 반지름 * sin(theta)입니다.

 

float angleDegrees = -angle * Mathf.Rad2Deg; 이 부분을 해주는 이유는 Unity에서는 y축을 중심으로 회전할 때, 시계 방향이 양의 각도를 나타내고 반시계 방향이 음의 각도를 나타냅니다. 그러나 일반적인 수학에서는 원의 각도를 측정할 때 반시계 방향을 양의 각도로 취급하기 때문입니다.

 

따라서, angle 값은 반시계 방향을 양의 각도로 계산하므로, 이를 Unity의 좌표계에 맞게 조정하기 위해 마이너스를 곱해주어 angleDegrees를 양의 각도로 나타내게 됩니다.

 

Mathf.rad2deg는 라디안을 degree로 바꿔줍니다.