게임 분석, 리뷰, 소개, 개발 전문 블로그


오늘 공부할 내용

오늘은 테이블에 저장된 유저의 정보를 받아오는 것에 대해서 다룹니다. 

뒤끝베이스 - 게임 정보 관리 - 게임 정보 읽기 페이지를 참고했습니다. 

뒤끝베이스 - 소셜 기능 - 유저찾기 페이지를 참고했습니다.

 


동영상 강좌

 


스크립트 작업

1. 테이블 리스트 불러오기

뒤끝콘솔창에 저장된 공개(Public) 또는 비공개(Private) 테이블 리스트를 받아오는 방법입니다. 

BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

#코드 설명

Backend.GameInfo.GetTableList();

서버에서 테이블 리스트를 불러오는 코드입니다. 

결과가 RBackendReturnObject 으로 반환됩니다. 

JsonData publics = BRO.GetReturnValuetoJSON()["publicTables"];

테이블 리스트는 Json 형식으로 전달됩니다. 

게임정보 읽기 -  GetTableList - 결과값 예시를 참고하세요.

위 코드는 publicTables 키로 전달된 값을 JsonData 타입으로 형변환해서 참조시키는 코드입니다. 

 

2. 공개 테이블(Public)의 정보 받아오기

뒤끝콘솔창에 저장된 공개(Public) 테이블에서 특정 정보를 불러오는 방법입니다.

BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

#코드 설명

BackendReturnObject BRO = Backend.GameInfo.GetPublicContents("custom", 1);

custom 테이블에 저장된 첫번째 데이터를 불러오는 코드입니다. 

GetPublicContents("테이블 이름", 불러올 테이블 개수); 를 입력합니다.
두번째 메개변수를 입력하지 않으면 디폴트로 10개의 정보를 불러옵니다.

GetGameInfo(BRO.GetReturnValuetoJSON()); 는 아래에서 설명합니다.

CheckError(BRO); 도 아래에서 설명합니다.

 

3. 공개 테이블(Public)의 정보를 리스트로 가져오기

위 2 의 코드는 첫번째 데이터에서 부터 ~ 원하는 지점까지의 데이터를 불러옵니다. 

이번에는 불러온 데이터에서 부터 ~ 원하는 지점까지의 데이터를 불러오겠습니다. 

BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

#코드 설명

string firstKey = string.Empty;

firstKey변수에 불러온 데이터의 firstKey 값을 저장할 예정입니다.

그러므로, 전역 변수 fistKey 의 값이 null 이면 아직 불러온 데이터가 없다는 의미가 됩니다.

Backend.GameInfo.GetPublicContents("custom", firstKey, 1);

GetPublicContents("불러올 테이블 이름", "firstKey값", 이어서 불러올 데이터 개수) 를 통해 이어서 데이터를 불러올 수 있습니다.

 

4. 비공개 테이블에서 본인 정보 가져오기

이번에는 비공개 테이블에서 본인의 정보를 가져오는 방법에 대해 다룹니다.

BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

#코드 설명

Backend.GameInfo.GetPrivateContents("character"); 를 통해 불러옵니다. 

비공개 테이블은 본인 정보 외에는 열람할 수 없기 때문에 테이블이름만 매개변수로 전달합니다.

 

5. 공개 테이블에서 특정 유저의 정보 불러오기

공개 테이블에서 특정 1명의 유저의 정보를 불러오는 방법에 대해 다루겠습니다.

특정 1명의 유저 정보를 불러오려면 닉네임을 통해서 해당 유저의 InDate 값을 받아와야 합니다. 

뒤끝베이스 - 소셜 기능 - 유저찾기 페이지 를 참고하세요.

 

BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

#코드 설명

위 뒤끝베이스 - 소셜 기능 - 유저찾기 페이지를 참고해서 특정 유저의 Indate 값을 아래 코드의 두번째 매개변수로 전달합니다. Backend.GameInfo.GetPublicContentsByGamerIndate("custom", "Indate값"); 

 

6. GetGameInfo.cs

위 5개의 함수에서 전달한 JsonData 를 통해 데이터의 복수, 단수 여부에 따라 반복문으로 정리하고 JsonData를 파싱하는 함수로 row 값을 전달하는 함수를 만들겁니다. 

BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

#코드 설명

returnData.Keys.Contains("rows")

JsonData 에 rows 라는 문자열이 포함되어 있으면 여러 개의 데이터로 이뤄진 JsonData 라는 의미입니다. 

전달받은 데이터가 여러 개라면 반복문을 통해 한 개씩 데이터를 뽑아서 JsonData 를 파싱하는 GetData 함수로 전달합니다.

returnData.Keys.Contains("row")
데이터 1개만 전달받은 경우는 반복문 없이 바로 JsonData를 파싱하는 GetData 함수로 전달합니다.

 

7. JsonData 파싱

마지막으로 전달받은 JsonData 를 파싱해서 해당 값을 읽을 겁니다. BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

#코드 설명

JsonData는 키와 값으로 이뤄져 있습니다. 그러므로, JsonData["키이름"][번호] 를 통해 값을 추출할 수 있습니다.

var 라는 변수타입은 참조하는 값에 따라 변수타입을 알아서 지정해주는 거라고 생각하시면 됩니다. 

※ var 에 대한 상세한 설명은 https://dybz.tistory.com/96 이 페이지를 참고합니다. 

 

 if(data.Keys.Contains("lv"))

안전 장치로 전달받은 데이터에 해당 키가 존재하는지 확인하는 코드입니다. 

 


 data["equipItem"][0]["weapon"][0]

Dictionary 로 저장한 데이터는 다차원 배열로 저장됩니다.

 

8. Error 코드 체크

마지막으로 각 메소드마다 발생하는 에러를 처리하는 함수를 만들겠습니다. 

BackEndGameInfo.cs 에 아래 함수를 추가합니다. 

 


UI 작업

Indate 로 정보 불러오기는 분량 문제로 제외했습니다.

버튼 4개를 만들고 방금 만든 함수들을 연결시켰습니다.

 


테스트 결과

정상적으로 출력되는 것을 확인했습니다.

테이블에 없는 키를 참조하려고 하면 맨 아래처럼 에러가 발생합니다. 

if(data.Keys.Contains("lv")) 이런 방식으로 해당 키가 있는지 확인해서 에러가 출력되지 않도록 하는 습관을 가지면 좋습니다. 자세한 테스트 영상은 동영상 강좌에서 진행하겠습니다.