본문 바로가기

Unity/뒤끝

[뒤끝 파헤치기] #09. 사용자 게임 정보 저장

반응형

해당 강의는 PC환경에 최적화 된 글 입니다.

목록 바로가기

https://cheolmini.tistory.com/53

 

[뒤끝 파헤치기] #09. 사용자 게임 정보 저장

뒤끝 파헤치기 아홉번째 강의글 입니다.

 

동기, 비동기식으로 사용자의 데이터를 저장해 볼 것입니다.

 

해당 강의는 스키마 미정의로 진행하며, 스키마를 정의했을시 그 컬럼에 대한 데이터형식만 지켜주시면 됩니다.

 

그외에는 다른것이 없습니다.


1. 뒤끝 콘솔 설정

 

뒤끝 콘솔 - 게임 정보 관리 - 테이블 관리

 

해당 탭에서 테이블을 만들고 관리할 수 있습니다.

 

 

테이블을 만들기 버튼을 누르면 다음과 같이 나옵니다.

 

분류에서 public 로 할 시 다른 유저의 정보도 가져올수 있습니다(타유저 장비를 보거나 등)

 

스키마를 정의 하면 원하는 컬럼을 미리 정의할 수 있습니다.

 

 

 

해당 강의에서는 기본적으로 만들어진 테이블을 사용하여 진행합니다.

 

방법은 똑같으니 응용해보시면 될것 같습니다.

 

2. 전역변수

 

데이터를 넣기위한 딕셔너리 하나를 정의해줍니다.

 

이렇게 딕셔너리를 사용하여 데이터를 넣을 수 있습니다.

 

    Dictionary<string, int> weapon = new Dictionary<string, int>
{
    { "gun", 1 },
    { "knife", 5 },
    { "punch", 3 }
};

 

3. 예외처리 함수

 

언제나 참고만 해주세요.

 

    void Error(string errorCode, string type)
    {
        if (errorCode == "DuplicatedParameterException")
        {
            if (type == "UserFunc") print("중복된 사용자 아이디 입니다.");
            else if (type == "UserNickname") print("중복된 닉네임 입니다.");
        }
        else if (errorCode == "BadUnauthorizedException")
        {
            if (type == "UserFunc") print("잘못된 사용자 아이디 혹은 비밀번호 입니다.");
        }
        else if (errorCode == "UndefinedParameterException")
        {
            if (type == "UserNickname") print("닉네임을 다시 입력해주세요");
        }
        else if (errorCode == "BadParameterException")
        {
            if (type == "UserNickname") print("닉네임 앞/뒤 공백이 있거나 20자 이상입니다.");
            if (type == "UserPW") print("잘못된 이메일입니다.");
        }
        else if (errorCode == "NotFoundException")
        {
            if (type == "UserPW") print("등록된 이메일이 없습니다.");
            else if (type == "Coupon") print("중복 사용이거나 기간이 만료된 쿠폰입니다.");
            else if (type == "gameData") print("해당 테이블을 찾을 수 없습니다.");
        }
        else if (errorCode == "Too Many Request")
        {
            if (type == "UserPW") print("요청 횟수를 초과하였습니다. (1일 5회)");
        }
        else if (errorCode == "PreconditionFailed")
        {
            if (type == "gameData") print("해당 테이블은 비활성화 된 테이블 입니다.");
        }
        else if (errorCode == "ServerErrorException")
        {
            if (type == "gameData") print("하나의 row이 400KB를 넘습니다");
        }
    }

 


동기 방식


1. 게임 정보 저장

Backend.GameInfo.Insert ( "tableName", param );

 

해당 테이블에  Param 클래스를 저장합니다.

 

Param 클래스 정보

 

Param 클래스에 각종 정보를 저장합니다.

 

    public void insertData()
    {
        Param param = new Param();
        param.Add("exp", 100);
        param.Add("level", 30);
        param.Add("weapon", weapon);

        BackendReturnObject BRO = Backend.GameInfo.Insert("character", param);

        if (BRO.IsSuccess()) print("동기 방식 데이터 삽입 성공");
        else Error(BRO.GetErrorCode(), "gameData");

    }

 



비동기 방식


1. 게임 정보 저장

 

BackendAsyncClass.BackendAsync(Backend.GameInfo.Insert, "tableName", param, (callback) => { // 이후 처리 });

 

    public void insertDataAsync()
    {
        Param param = new Param();
        param.Add("exp", 100);
        param.Add("level", 30);
        param.Add("weapon", weapon);

        BackendAsyncClass.BackendAsync(Backend.GameInfo.Insert, "character", param, (callback) =>
        {
            if (callback.IsSuccess()) print("비동기 방식 데이터 삽입 성공");
            else Error(callback.GetErrorCode(), "gameData");
        });
    }

UI 구성하기

 

버튼 2개를 추가하여 주었습니다.

 


결과

동기방식으로 데이터 저장

 

비동기 방식으로 데이터 저장

 

데이터 관리에 가보시면 해당 데이터들이 저장되어 있습니다.

 

데이터 저장시 최초 한번만 해야합니다. 

 

현재 2개인 이유는 비동기, 동기 방식으로 하여 2개이며 데이터를 불러올시 정보를 불러오는게 이상합니다.

 

그렇기 때문에 최초 한번만 생성 후 데이터를 업데이트 하는 식으로 해야합니다.

 


참고 글

https://developer.thebackend.io/unity3d/guide/gameData/createv1_1/

 

뒤끝 개발자

모바일 게임 서버를 쉽게 생성, 관리 할 수 있는 뒤끝의 개발자 사이트입니다.

developer.thebackend.io


모든 프로젝트는 깃 허브에 업데이트 할 예정입니다.

 

https://github.com/CM-Games/BackEnd

읽어 주셔서 감사합니다.

 

더보기

검색어

뒤끝베이스

뒤끝강좌

뒤끝

뒤끝매치

뒤끝챗

유니티뒤끝

백앤드

유니티백앤드

유니티서버

유니티데이터저장

뒤끝기초

뒤끝서버

반응형