Unity 랜덤 클래스 사용하기
이 문서에서는 Unity의 Random 클래스를 활용하여 다양한 랜덤 값 생성 방법과 이를 스크립팅에서 어떻게 활용할 수 있는지에 대해 설명합니다.
Random 클래스 개요
Random 클래스는 다양한 타입의 랜덤 값을 생성하는 데 유용한 여러 메서드를 제공합니다. 다음은 주요 메서드와 그 사용법입니다.
| 메서드 | 설명 |
|---|---|
| Random.value | 0.0에서 1.0 사이의 랜덤 부동 소수점 수를 반환합니다. |
| Random.Range(min, max) | 지정한 최소값과 최대값 사이의 랜덤 정수 또는 부동 소수점 수를 반환합니다. |
| Random.insideUnitCircle | 반지름이 1인 원 내부의 랜덤 점을 반환합니다. |
| Random.insideUnitSphere | 반지름이 1인 구 내부의 랜덤 점을 반환합니다. |
| Random.onUnitSphere | 반지름이 1인 구의 표면에 있는 랜덤 점을 반환합니다. |
| Random.rotation | 랜덤 회전을 생성합니다. |
| Random.ColorHSV | 랜덤 색상을 생성합니다. |
간단한 랜덤 숫자 생성
Random.value 메서드는 0.0에서 1.0 사이의 랜덤 숫자를 제공합니다. 이 결과에 특정 범위를 곱하여 원하는 범위의 랜덤 숫자를 얻을 수 있습니다.
예를 들어, 숫자 0과 10 사이에서 랜덤 값을 생성하려면 다음과 같이 하면 됩니다:
float randomValue = Random.value * 10;
Random.Range 메서드는 최소값과 최대값 사이의 랜덤 수를 제공하며, 제공된 값의 타입에 따라 적절한 결과를 반환합니다.
배열에서 랜덤 요소 선택하기
배열의 랜덤 요소를 선택하는 방법은 다음과 같습니다:
var element = myArray[Random.Range(0, myArray.Length)];
이 코드는 배열 myArray에서 랜덤하게 하나의 요소를 선택합니다.
확률 기반 선택기
특정 항목이 선택될 확률을 다르게 설정하고자 할 때, 확률 배열을 이용할 수 있습니다. 예를 들어 NPC의 행동 확률을 설정하려면 다음과 같이 구현할 수 있습니다.
- 확률 배열 설정
csharp float[] probabilities = {0.5f, 0.25f, 0.2f, 0.05f}; // 각 행동의 확률
- 랜덤 선택 함수
```csharp float Choose(float[] probs) { float total = 0; foreach (float elem in probs) total += elem;
float randomPoint = Random.value * total;
for (int i = 0; i < probs.Length; i++) {
if (randomPoint < probs[i]) return i;
randomPoint -= probs[i];
}
return probs.Length - 1; // 모든 경우의 수가 선택되지 않으면 마지막 요소 반환
} ```
이렇게 구현하면 각 행동의 확률에 따라 랜덤 선택이 가능합니다.
가중치를 지정한 랜덤 값 생성
더 정교한 랜덤 값 생성을 원할 경우 AnimationCurve를 사용할 수 있습니다. 이 방법은 훨씬 연속적인 결과를 제공합니다. 예를 들어, 다음과 같은 함수를 사용하여 가중치가 있는 랜덤 값을 생성할 수 있습니다:
float CurveWeightedRandom(AnimationCurve curve) {
return curve.Evaluate(Random.value);
}
이 코드에서는 Random.value로 생성된 값을 이용하여 AnimationCurve에서 해당 값을 확인하여 결과를 반환합니다.
리스트의 순서를 섞기
아이템의 순서를 랜덤하게 섞기 위해 다음과 같은 함수를 사용할 수 있습니다:
void Shuffle(int[] deck) {
for (int i = 0; i < deck.Length; i++) {
int temp = deck[i];
int randomIndex = Random.Range(i, deck.Length);
deck[i] = deck[randomIndex];
deck[randomIndex] = temp;
}
}
이 코드는 배열의 각 요소를 무작위로 섞는 방법을 보여줍니다.
무작위로 선택하되 반복 방지
특정 아이템 집합에서 몇 몇만 무작위로 선택하고, 선택된 아이템은 다시 선택되지 않도록 하려면 다음과 같은 방법으로 할 수 있습니다:
Transform[] ChooseSet(int numRequired) {
Transform[] result = new Transform[numRequired];
int numToChoose = numRequired;
for (int numLeft = spawnPoints.Length; numLeft > 0; numLeft--) {
float prob = (float)numToChoose / (float)numLeft;
if (Random.value <= prob) {
numToChoose--;
result[numToChoose] = spawnPoints[numLeft - 1];
if (numToChoose == 0) break;
}
}
return result;
}
여기서 사용자는 필요한 아이템 수를 기준으로 랜덤 선택을 하면서 중복 선택을 방지합니다.
공간에서 랜덤 포인트 생성하기
3D 공간에서 랜덤 포인트를 생성하는 방법입니다. Vector3를 사용하여 랜덤 벡터를 생성할 수 있습니다:
var randVec = new Vector3(Random.value, Random.value, Random.value);
이렇게 하면 1x1x1 큐브 내에 랜덤 포인트가 생성됩니다. 특정 크기로 스케일링하여 사용할 수도 있습니다.
이 문서를 통해 Unity의 Random 클래스를 활용하는 기초적인 방법과 활용 사례를 이해하시기 바랍니다. 이 클래스는 게임 개발에서 유용하게 사용될 수 있는 강력한 도구입니다.