반응형

 


안녕하세요 솔루션입니다. 정확히 3개월만에 다시 포스팅 하게 됐네요 ! 구직한다고 이것저것 준비하고 소모임 들어가서 개발하다보니까 개인적으로 진행하는 프로젝트가 없어서 포스팅 거리가 마땅치 않았어요 ㅠ, 그래도 매일 들어와서 확인은 해왔었는데 너무 포스팅이 없는거 같아서 간단한 스크립트 중에서 안올렸던 걸 생각해내서 포스팅 하러 왔습니다 !

게임에서 아이템이 확률적으로 드랍되거나 효과가 확률적으로 적용되는 등 확률을 거는 방법에 대해 포스팅할게요 ~

 


언제나처럼 코드는 간단합니다.

인게임에서 키보드 'E'키를 입력하면 랜덤하게 int A와 float B 값이 설정되고 로그를 띄우도록 만들었습니다.

 

스크립트를 저장하고 플레이 상태에서 E키를 2번 눌러봤습니다. int와 float의 값이 랜덤하게 프린트되는 걸 확인하실 수 있습니다.

이를 응용해서 위에서 말한 것 처럼 확률 아이템드랍, 효과 적용 등에 이용할 수 있습니다.

 

만약 int A가 0이 나온다면 스킬 효과가 적용되는 조건문을 넣으면 0~5의 (0, 1, 2, 3, 4) 총 5개의 인수 중 랜덤한 1개가 나오게 되니 20%의 확률로 나오게 되겠죠? 이런 방식으로 응용하면 됩니다. 그 밖에 다른 조건문들로도 동일하게 사용할 수 있으니 용도에 맞게 사용하시면 되겠습니다 :D 

 

 

그리고 추가적으로 드릴 중요한 점 2가지를 알려드리려고 해요.

첫번째로 int는 당연히 정수형으로만 나옵니다. 하지만 float은 소수까지 나오게 할 수 있습니다. 지금 예시로 짠 코드에서는 (0.0f, 5.0f)라고 하지 않아서 정수로만 출력이 되는데요, 만약 (0.0f, 5.0f)라고 지정하게 되면 소수를 포함해서 랜덤하게 됩니다. 0.00123 같은 식으로요. 소수점까지 사용하시려면 Mathf를 이용하셔서 사용하시면 될 것 같습니다. 

 

그리고 사실 이게 가장 중요해서 말씀드리려고 했던 건데 두번째로 int와 float 랜덤 모두 RandomRange(min, max) 입니다. 즉 최솟값과 최댓값의 범위를 지정해주는 건데 int형의 랜덤 범위는 최솟값 이상, 최댓값 미만 입니다. 하지만 float형의 랜덤 범위는 최솟값 이상, 최댓값 이하입니다. 

즉 int A = Random.RandomRange (0, 2) 는 0, 1만 나옵니다. 하지만 float은 float B = Random.RandomRange (0, 2) 는 0, 1, 2가 나옵니다. 예전에 랜덤함수를 처음 알게됐을 땐 int만 알고 있어서 항상 int로 사용했었는데 소수점이 필요한 랜덤 때문에 float으로 했었는데 리턴값이 이상해서 알아보니 int는 max값을 포함하지 않은 값이 나오고 float은 max값을 포함한 값이 나온다고 하더라구요. 여러분들은 이런 고생 겪지 않으시길 바랍니다 ... !

 

참고로 RandomRange에 관한 유니티 레퍼런스는 [클릭] <- 링크 걸어두었습니다 ~

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기