본문 바로가기

[Unity] 가중치 있는 랜덤 뽑기 기능 추가하기

Kwonriver 2023. 1. 31.
728x90

 

직전에 소환된 객체의 레벨에 따라 가중치를 변경하여 다음 객체의 레벨을 만드는 기능을 추가한다.

가중치는 직전 레벨과 동일한 레벨을 100으로 두며 직전 레벨에서 멀어질수록 감소한다.

 


 

먼저 Dictionary를 사용하여 키와 밸류를 받는다. 이 때 Key는 레벨, value는 가중치가 된다.

0레벨부터 최대 레벨까지 탐색하며 이전 이전 레벨 - i를 통해 직전 레벨과의 차이를 구하고 10을 곱한 뒤 100에서 빼준다.

이렇게 하면 직전 레벨과 같을 경우에는 차이가 0이 되어 100이 되고 멀어질수록 작아진다.

 

다음 확률의 최대값을 계산할 수 있도록 가중치를 모두 더해준다.

 


 

다음 0부터 최대 가중치 중 하나를 선택한다. 이 때 Random.Range 함수를 사용한다. Random.RandomRange 함수는 Deprecated 되었으므로 사용하지 않는다.

 

랜덤으로 뽑아낸 값이 어디에 속하는지 체크한다.

Dictionary를 탐색하면서 시작점(Current)와 시작점(Current) + 가중치 사이에 현재 뽑은 값이 속하는지 체크한다.

속한다면 현재 i 값을 레벨로 사용한다.

속하지 않는다면 Current에 가중치를 더해 다음 레벨 계산을 한다.

 


 

직전 레벨에 따라 가중치 합과 가중치가 달라지는 모습이다.

728x90