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의 행동 확률을 설정하려면 다음과 같이 구현할 수 있습니다.

  1. 확률 배열 설정

csharp float[] probabilities = {0.5f, 0.25f, 0.2f, 0.05f}; // 각 행동의 확률

  1. 랜덤 선택 함수

```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 클래스를 활용하는 기초적인 방법과 활용 사례를 이해하시기 바랍니다. 이 클래스는 게임 개발에서 유용하게 사용될 수 있는 강력한 도구입니다.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA