랜덤 원형안에 오브젝트 생성시키기
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);
}
}
'유니티 unity' 카테고리의 다른 글
Unity로 node.js WebSocket 통신하기 -1 (0) | 2022.07.19 |
---|---|
Mathf 함수 전부 알기 (0) | 2022.07.17 |
3d 오브젝트 드래그로 이동시키기 (0) | 2022.07.15 |
Handles와DrawGizmos 활용해서 시야각만들기 (0) | 2022.07.12 |
Photon Pun2 리소스(Resources) 폴더 아닌곳에서 생성하는법,에셋번들 어드레서블(Addressable) 같이 사용하는법 (0) | 2022.07.11 |