유니티 게임 개발 일지

유니티 궁수의 전설 모작 - 3 (데이터베이스 연동 & 로딩창 만들기)

더크 2021. 7. 24. 10:05

몬스터의 경우 데이터베이스를 연동해서 몬스터 스크립트 하나만으로 하도록 도전해보려고한다.

이전에 게임을 만들 때는 몬스터 하나하나를 스크립트 따로 지정해주어 하드코딩을 하였는데 기획을 배우면서

이방법이 잘못되었다는걸 깨달았다. 

 

1.데이터 베이스 작성 (구글 스프레드 시트)

일단 구글 스프레드 시트를 사용한 이유는 데이터베이스 파일을 따로 가지고다니지 않아도 구글에 항상 존재하기 

때문에 이용하였다.

몬스터 스테이터스
몬스터 행동 패턴

첫번째는 몬스터의 스테이터스값을 넣은 데이터베이스이고

두번째는 몬스터의 행동 패턴값을 넣었다. 두번째에서 만든 행동 패턴을 첫번째 테이블에서 Petrun1 ~ 5 안에

행동 패턴 ID를 넣어주면 그 행동을 실행하도록 하였다.

 

 

2.구글 스프레드 시트 & 유니티 연동

데이터 매니저 스크립트

일단 구글 스프레드시트는 인터넷이기 때문에 UnityEngine.Networking을 적어줘서 네트워킹을 할 수 있도록 한다.

다음으로 몬스터 스텟 저장을 위한 Monster 클래스와 MonsterPeturn 클래스를 만들고 List를 만들어서

모든 데이터를 객체화 시켜서 저장했다.

 

스프레드 시트 불러오기

 

일단 string URL변수에 두개의 테이블의 주소를 저장 시키고 밑에는 객체를 저장할 리스트를 선언하였다.

 

불러오기

아직 코루틴에 대해서 정확히 이해를 못해서 이방법에 대해서는 정확히 설명을 못하겠다.

100줄

DonDestroyOnLoad는 데이터매니저는 항상 유지 되어야하기 때문에 이 스크립트가 안사라지도록 하였다.

 

102 ~ 107줄

주소를 불러와서 string변수에 데이터베이스 텍스트를 저장시켰다.

 

109 ~ 110줄

다음 line, line2 배열에 데이터베이스텍스트의 0줄부터 끝줄까지 뛰어쓰기를 기준으로 나누고 배열에 추가하였다

(Split : 나누다)

 

112 ~ 118줄

여기서 또 split이 등장했는데 \t 는 엑셀을 텍스트로 불러왔을때 각각의 값 사이가 \t로 나뉜다고 보면 된다.

각 줄마다 데이터를 나눠서 객체화를 하였다.

 

 

3.몬스터 ID와 맞는 데이터 가져오기

몬스터 인스펙터

몬스터 스크립트에 ID변수를 만들고 해당 ID를 입력하면 위에서 받아온 데이터매니저 스크립트에서 몬스터ID와 동일하는

데이터를 불러오도록 하였다.

 

(문제 발생!)

근데 여기서 문제가 생겼다 네트워킹을 이용하다보니 데이터를 받아오는데 3초정도 걸린다 그런데 몬스터 스크립트

에서는 Start에서 데이터를 받아오기 때문에 3초간 데이터가 없어서 널리퍼런스 오류가 생긴다.

이 때문에 데이터를 받아오고 몬스터를 생성하는 방식으로 하기로 했다.

 

 

3.로딩창 구현

로딩 씬

일단 로딩씬을 만들고 UI를 배치하였다.

다음 스크립트를 보자

데이터매니저 스크립트
데이터 매니저 스크립트

일단 DownLoadCheck bool 변수를 데이터 매니저에 넣고 데이터를 다 받으면 True로 바꿔주고

 

로딩 스크립트

데이터 매니저의 bool변수가 true가 되면 씬을 전환시켜 주었다.

씬 전환을 위해서는 상단에 UnityEngine.SceneManagement 를 넣어주면 된다.

 

데이터베이스 연동도 처음이였는데 해보니까 재미있었다. 예전에 학교에서 파이썬과 Sqlite 연동한 기억이 난다 ^^