랜덤 원형안에 오브젝트 생성시키기

2022. 7. 17. 00:28유니티 unity

원형안에 랜덤으로 생성시키는 함수를 소개합니다.

https://docs.unity3d.com/kr/530/ScriptReference/Random-insideUnitSphere.html

 

Vector3 insideUnitSphere 반경이 1인 구 내부의 임의의 점을 반환합니다 

 

정해진 Vector 기준으로 insideUnitSphere*반경을 곱하면 랜덤 원형안에 오브젝트가 생성됩니다.

 

 

기즈모로 그려서 테스트를 했습니다.

private void OnDrawGizmosSelected()
{
    Handles.DrawWireArc(transform.position, Vector3.up, Vector3.forward, 360, 5); //3d공간에 circular 그리기 

}

예제를 보면

 

public GameObject prefab;

void Update() // 업데이트상
{
        if (Input.GetKeyDown(KeyCode.Q))
        {
            //현재 위치에서 5반경 랜덤으로 원형자리에 Vector3를 구합니다.
            Vector3 pos=transform.position+(Random.insideUnitSphere*5f);
            
            pos.y = 0;
            //높이는 0으로
            
            // 그 자리에 오브젝트를 생성시킵니다.
            GameObject ob = Instantiate(prefab, pos, Quaternion.identity);
            
            Destroy(ob,1f);
        }
}

 

 

 

 

 

번외로 정해진 거리 원형으로 랜덤 방향으로 생성시키고싶으면

삼각함수 Sin과Cos를 이용하면됩니다

 

void Update()
{
	if (Input.GetKeyDown(KeyCode.W))
        {
            int ran = Random.Range(0, 360); //랜덤으로 0~360도
            float x = Mathf.Cos(ran*Mathf.Deg2Rad) * 5f; // 정해진 위치에서 5만큼 떨어진 원형 랜덤 방향으로 생성
            float z = Mathf.Sin(ran*Mathf.Deg2Rad) * 5f; // 정해진 위치에서 5만큼 떨어진 원형 랜덤 방향으로 생성
            Vector3 pos = transform.position +new Vector3(x, 0, z); //y는 높이 이기때문에 0으로
            GameObject ob = Instantiate(prefab, pos, Quaternion.identity);
             Destroy(ob,1f);
        }
 }