게임프로그래밍/unity

유니티 insideUnitSphere, insideUnitCircle를 사용한 몬스터 스폰 코드

chunkind 2025. 3. 29. 21:33

insideUnitSphere와 insideUnitCircle는 모두 무작위한 점을 생성하는 Unity의 Random 클래스의 함수지만, 생성되는 공간이 다름.


Random.insideUnitSphere

3D 공간에서 단위 구(반지름 1인 구) 내부의 임의의 점을 반환한다.

반환값은 (x, y, z) 형태의 Vector3.

Vector3 randomPoint = Random.insideUnitSphere;

 

게임에서 입자 시스템(particle system)이나 랜덤한 3D 위치 설정에 활용할 수 있다.

 

Random.insideUnitCircle

2D 공간에서 단위 원(반지름 1인 원) 내부의 임의의 점을 반환한다.

반환값은 (x, y) 형태의 Vector2

Vector2 randomPoint = Random.insideUnitCircle;

 

2D 게임에서 무작위한 위치 지정이나 효과(예: 적의 출현 위치) 등에 유용하다.


즉, insideUnitSphere는 3D 공간에서 구 내부의 점을 반환하고, insideUnitCircle은 2D 공간에서 원 내부의 점을 반환한다는 차이가 있다.

 

몬스터 스폰 예제

void Start()
{
    StartCoroutine(SpawnCoroutine());
}

IEnumerator SpawnCoroutine()
{
    Vector3 pos;

    for (int i = 0; i < m_Count; i++)
    {
    	// 범위 0f ~ 5f 안에 임의로 생성
        pos = Vector3.zero + Random.insideUnitSphere * 5.0f;
        pos.y = 0.0f;

		// 범위 0f ~ 3f 까지는 다시 생성 하여 3~5f 까지의 거리를 얻어냄
        while(Vector3.Distance(pos, Vector3.zero) <= 3.0f)
        {
            pos = Vector3.zero + Random.insideUnitSphere * 5.0f;
            pos.y = 0.0f;
        }

        var go = Instantiate(monster_Perfab, pos, Quaternion.identity);
        m_CurCount++;
    }

    yield return new WaitForSeconds(m_SpawnTime);

    StartCoroutine(SpawnCoroutine());
}

 

반응형