본문 바로가기
ぺ Let's do it ぺ/⒈유니티(Unity3d)

[별아재군/unity3d] 상점에서 금화나 보석으로 아이템 뽑기

by 망고부인 2021. 9. 11.
728x90

이제부터 상점에서 금화나 보석으로 아이템 뽑기를 구현해 보자.

 

일간 구현개념을 잡아야 한다..

1. 나에게 군자금으로 금화와 보석이 있다.

2. 아이템들 데이터베이스, 리스트가 있어야 한다.

3. 아이템은 가중치 레벨이 있다. (1성 ~ 5성까지)

4. 금화로는 1성~3성까지 뽑기

5. 보석은 3~5성까지 뽑기

6. 가중치는 일단 각각 60%, 30%, 10%로 정한다.

7. 먼저 뽑을 가중치 레벨을 랜덤으로 정한다.

8. 선택된 가중치 레벨의 아이템을 데이터베이스에서 축출한다.

9. 축출된 이이템들 중에서 램덤으로 하나를 뽑는다.

10. 정해진 금화, 보석을 차감하고 뽑은 아이템을 내 아이템 리스트에 저장한다.

 

오케이 여기까지 로직을 정했으니..

구현해 보자..

일단, 최초 시작하면 레벨, 경험치가 0이다

레벨이 0인 상태로 메뉴씬으로 넘어가면 토튜리얼이 실행되고,

토튜리얼이 끝나면 레벨 1인 되며..

레벨 1부터는 불러오기를 해도 튜토리얼이 실행되지 않는다..

 

그리고 중요한 보석 500개, 금화 50,000냥..

아이템(영웅카드) 상점 구현..

나중에 이쁜 이미지를 연결하면 될 것이고..

일단 기능 구현을 해야하니까..

금화뽑기와 보석뽑기 2가지 모드

뽑기가 끝나면 군자금을 차감해야 하고..

군자금이 충분해야 뽑기가 가능함으로

저장된 파일은 모두 string 형태이다.

따라서 차감을 하려면 int형으로 전환을 해야한다.

몇가지 찾아봤는데.. Convert를 사용하는 방법은 에러가 난다.. 왜지?

아무튼 아래 두가지 방법은 성공

일단 군자금이 10,000 이상은 있어야 뽑기 가능

세상에 공짜가 어디 있어..

 

뽑으려는 아이템에는 가중치가 있다. 1성 ~ 3성

어떤 가중치의 아이템을 대상으로 뽑을지

가중치 값을 랜덤으로 뽑는다..

(보석뽑기 먼저 했더니 값을 수정못함 ㅋㅋ

3 -> 1, 4 ->2, 5 ->3 수정해야 함

선택된 가중치 값에 해당하는 아이템만 축출해서 List형으로 저장한다.

List형에 몇개의 아이템이 축출됐는지 개수를 저장하고

확인삼아..

추출된 List형에 아이템을 출력한다.

축출된 아이템 중에서 랜덤으로 하나를 뽑고

램덤 값은 float형이니 int형으로 전환하고

해당 숫자의 아이템을 축출해서 저장

축출된 아이템을 플레이어 소지품에 추가

뽑기가 성공했으니 군자금을 차감하고..

결과를 저장한다..

군자금이 부족하면 뽑기 불가..

게임 처음 시작하고 

기본 정보와 기본 소지금

상점 클릭하면 상점 화면으로

최초 가지게 되는 유비 아이템..

금화뽑기, 보석뽑기 한번씩 진행하고 차감된...

플레이어 아이템에 뽑은 아이템 추가..

스크립트 작성하면서 에러도 많이 나고..

원인 찾느라 늦게 잠들고..

그래도 구현이 완료되어 다행..

다시 한단계 앞으로 나아감.. ㅎㅎ.

 

p.s.

코딩이 지져분해서 이분 수정함..

별3 ~ 별5 뽑을때 자꾸 이러가 발생했다..

왜 그런지 이유를 잘 몰랐는데..

DB를 다시 보니.. 별4이 캐릭터가 없다.. ㅋㅋ

데이터 베이스트 미축을 별4급으로 변경해 주니 버그 해결!! .

 

p.s.

string <-> int 등 참고

C#에서 Float를 Int로 변환 | Delft Stack

 

C#에서 Float를 Int로 변환

C#에서 float를 int로 변환하는 데 사용할 수있는 4 가지 주요 메서드는 명시 적 형식 변환 메서드, Math.Ceiling() 함수, Math.Floor() 함수 및 Math.Round() 함수입니다.

www.delftstack.com

.

it leader (tistory.com)

 

[Unity3D] c# 변수형변환 int, float, string

c# 변수의 형변환 ( Type Convertion) 실수, 정수의 문자변환 int a =  3; string str = a.ToString(); flaot b = 3.0f; string str = b.ToString(); 정수 -> 실수 변환 int -> float int a = 3; float b = (floa..

itleader.tistory.com

.

 

728x90

댓글