-
[Unity]C# - Random에 관하여unity 2022. 7. 15. 13:43
SetNumber(Random.Range(0, 10));
유니티 C#을 하다 보면 랜덤 값을 출력 해야 할 때가 있다.
평소엔 잘 되다가 한번씩 Random에 빨간 줄이 생길 때가 있다.
이유는 간단한데 최상단으로 올려보면,
이런 식으로 system과 UnityEngine이 같이 명시되어 있기 때문이다.
둘 중 하나를 지우면(아마 system을 지우는것이 속편할 것이다.)문제는 해결된다.
그래도 나처럼 system을 지울 수 없는 상황이라면 또는 이 애러가 뭔지 궁금하다면 아래 내용을 같이 살펴보자.
애러의 내용은 아래와 같다.
모호한 참조라는게 어떤 말인지, 둘이 뭐가 다른 건지 모르겠으니 어떻게 하라는 건지 잘 모르겠다.
그래서 찾아 보니
UnityEngine.Random은 게임당 단일 "글로벌"임의의 스트림 만 제공하는 정적 클래스입니다. 진정으로 임의의 값을 원한다면 괜찮습니다.
그러나 System.Random의 각 인스턴스는 독립적 인 난수 생성기 스트림. 각 생성기는 nextValue ()가 호출 될 때만 고급이므로 생성하기가 훨씬 쉽습니다 재현 가능 주어진 종자로부터 시작하는 난수의 시퀀스.
게임에서 가슴에 전리품 방울의 빈도와 총에서 총알이 발사되는 속도의 차이와 같은 임의의 행동 정도를 가진 두 개의 완전히 분리 된 이벤트가 있다고 가정하십시오. UnityEngine.Random을 사용하면 두 개의 무작위 분포가 얽혀 있습니다. 총을 발사 한 횟수는 가슴에서 매우 희귀 한 갑옷을 입는지 여부를 결정하는 값에 영향을 미칩니다. 결과적으로 게임 테스트가 매우 어려워집니다. 따라서 사소한 무작위 행동 이외의 다른 경우에는 System.Random을 사용하는 것이 좋습니다 (알려진 시드로 초기화)
이 내용을 찾았다. 영어로 되어 있는 것을 번역해본 내용으로 생각보다 이해하기 쉽다.
요약하자면,
UnityEngine.Random
System.Random
둘 중 하나를 쓰면 된다는 거고,
UnityEngine.Random : 게임 내 전체 랜덤을 관리한다. 즉, 서로 다른 랜덤이더라도 UnityEngine.Random을 사용한다면 서로 영향을 준다는 말이다.
System.Random : 독립 랜덤으로 동작한다. 즉, System.Random을 사용한다면 서로 영향을 주지 않는다는 말이다.
간단한 예를 들자면,
게임 내 꽝이 있는 2가지 확률을 제어하고 싶다.
상자를 열어서 아이템이 나올 확률10%, 강화에 성공할 확률 10%
위 2가지 확률을 제어하기 위해,
UnityEngine.Random을 사용했다면 상자를 9번 열 동안 아이템을 획득하지 못한다면 강화 시도했을 때 무조건 성공한다.
System.Random을 사용했다면 상자를 9번 열 동안 아이템을 획득하지 못한다면 강화 시도했을 때 실패할 확률이 여전히 90%로 작동한다.
물론, 위 예시는 너무 극단적이며 상황에 따라 개발 능력에 따라 얼마든지 조율하고 조정될 수 있다.
하지만, 원리를 설명하기 위했다는 점 양해 바란다.
아, 참고로
SetNumber(Random.Range(0, 10));
이 코드를 사용하기 위해선 UnityEngine.Random을 사용해야 한다.
system.Random을 사용한 다면 아래의 내용 처럼 Range가 작동되지 않기 때문이다.
'unity' 카테고리의 다른 글
[unity]c# - : Selectable 상속 (0) 2022.08.23 [unity]C# Parent 사용 시 경고 메세지 (0) 2022.07.18 [Unity - c#]Vector3.Magnitude 활용하여 거리 구하기 (0) 2022.07.11 [unity] - [System.Serializable]은? (0) 2022.04.17 [unity - c#] : MonoBehaviour은 왜 있는 거지? (0) 2022.04.17