[유니티] UNITY GameObject의 위치를 랜덤(random)하게 생성하려면 어떻게 하나요?
안녕하세요. 오늘도 평화롭게 태풍이 다가오는 8월의 첫날입니다.
게임을 시작할 때 다양한 위치에 게임 말들을 위치시키고 싶을 때가 있습니다. 매번 정해진 위치를 적용하는 것 보다 게임의 흥미를 위해서 랜덤하게 생성할 필요가 있습니다.
이때 사용하는 것이 Random 스크립트 API 입니다.
How??? 어떻게 사용하는지 알아보겠습니다.
1. 사각형의 면에서 랜덤 값을 가져오고 싶을 때는Range()함수를 사용합니다.
X = Random.Range(0, 1f); // 가로 위치
Y = Random.Range(0, 1f); // 세로 위치
2. 원형의 면에서 랜덤 값을 가져오고 싶을 때는 insideUnitSphere 변수를 사용합니다.
Vector3 xyz = (Vector3)Random.insideUnitSphere; // 3D 공간의 랜덤 위치를 가져옴
이렇게 간단하게 가로세로 위치를 가져와서 Position값에 넣어서 구현할 수 있습니다.
아래와 같이 Randomtest 란 이름의 스크립터를 만들어서 빈오브젝트에 넣고 랜덤한 위치에 게임오브젝트를 생성하는 방법을 알아보겠습니다.
[예제1] 사각형의 면에 랜덤으로 위치값 가져오기
아래와 같이 스크립터를 생성하고, 빈오브젝트를 만들어서 넣습니다.
using UnityEngine;
public class Randomtest : MonoBehaviour
{
// 크기가 가로,세로 10인 정사각형에서 랜덤위치 가져오기
[Header("GameObject")]
public GameObject cubeIns; //생성하려는 게임오브젝트를 넣는다.
void Start()
{
float squaureRange = 10f; //생성하려는 범위의 크기를 넣어준다
for (int i = 0; i < 10; i++)
{
float rangeX = Random.Range(0, 1f) * squaureRange; //가로의 위치를 랜덤으로 생성한다.
float rangeY = Random.Range(0, 1f) * squaureRange; //세로의 위치를 랜덤으로 생성한다.
Vector3 randPos = new Vector3(rangeX, 5.0f, rangeY); //가로,세로의 위치 정보를 넣는다. 높이는 임의로 5로 설정함.
Instantiate(cubeIns, randPos, Quaternion.identity); //랜덤한 위치에 게임오브젝트를 생성한다.
}
}
}
그리고, 프리팹으로 만든 생성하고 싶은 게임오브젝트를 변수 cubeIns에 드래그앤드랍해서 넣고 실행하면 아래와 같이 랜덤하게 큐브가 생성되는 것을 확인 할 수 있습니다.

[예제2] 원형의 면에 랜덤으로 위치값 가져오기
아래와 같이 스크립터를 생성하고, 빈오브젝트를 만들어서 넣습니다.
using UnityEngine;
public class Randomtest : MonoBehaviour
{
// 크기가 반지름이 10인 원형에서 랜덤위치 가져오기
[Header("GameObject")]
public GameObject cubeIns; //생성하려는 게임오브젝트를 넣는다.
void Start()
{
float squaureRange = 10f; //생성하려는 범위의 크기를 넣어준다
for (int i = 0; i < 30; i++)
{
Vector3 randPos = (Vector3)Random.insideUnitSphere *squaureRange;
randPos.y = 5f; //높이 값을 임의로 5로 고정함.
Instantiate(cubeIns, randPos, Quaternion.identity); //랜덤한 위치에 게임오브젝트를 생성한다.
}
}
}
그리고, 프리팹으로 만든 생성하고 싶은 게임오브젝트를 변수에 드래그앤드랍해서 넣고 실행하면 아래와 같이 원형으로 랜덤하게 큐브가 생성되는 것을 확인 할 수 있습니다.

그럼 즐유 하세요 ^^
'유니티 프로그램' 카테고리의 다른 글
| [유니티] UNITY 게임화면 하늘의 구름이 흘러가게 하려면 어떻게 해야 할까요? (0) | 2022.08.19 |
|---|---|
| [유니티] UNITY 플레이시간(타이머)을 다음 씬(SCENE)까지 끊김없이 흐르게 하려면 어떻게 해야 할까요? (0) | 2022.08.09 |
| [유니티] UNITY 싱글톤패턴(Singleton Pattern)은 어떻게 쓰나요 (0) | 2022.07.26 |
| [유니티] UNITY Box Collider를 켜고, 끄는 코딩방법은 뭔가요? (0) | 2022.07.19 |
| [유니티] UNITY 안드로이드 앱을 만들고 나서 시작할 때 자꾸만 180도로 화면이 회전합니다. (0) | 2022.07.11 |