유저정보 저장 로드 - 2

길어져서 또 파트를 나눴다 양해바람 


EnumManager.cs를 만들어준다. 

enum타입의 자료들을 한번에 모으기 위한 스크립트다.

img.jpg

public enum GameMoney

{

    골드,

    크리스탈

}


스크립트에 있던 모든 내용을 지우고 이것만 써라 

나중에 다른 enum도 쓸거지만 우선 이대로 둔다. 


유저정보를 서버에 담기 전에 뒤끝 콘솔에서 테이블을 만들어두자

img.jpg

기존에 있던 다른 테이블은 싹다 지우고 위와같이 프라이빗 테이블 하나를 만든다.


UserInfo.cs 를 만들어서 게임매니저 오브젝트에 붙여주자

using BackEnd;

using LitJson;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class UserInfo : MonoBehaviour

{

    public static UserInfo instance;

    private void Awake() { instance = this; }


    [HideInInspector] string nickname;


    [HideInInspector] int gold;

    [HideInInspector] int crystal;


    [System.Obsolete]

    public void UserInfoLoad(System.Action callback = null)

    {

        LoadNickname(()=> {

            LoadGold(() => { LoadCrystal(()=> {

                Debug.Log(nickname);

                Debug.Log(gold);

                Debug.Log(crystal);

                if (callback != null) callback();

            });

            });

        });

    }


    [System.Obsolete]

    public void LoadNickname(System.Action callback = null)

    {

        BackendAsyncClass.BackendAsync(Backend.BMember.GetUserInfo, (backendCallback) =>{

            JsonData jsonData = backendCallback.GetReturnValuetoJSON()["row"];

            nickname = jsonData["nickname"].ToString();

            if (callback != null) callback();

        });

    }


    [System.Obsolete]

    public void LoadGold(System.Action callback = null)

    {

        BackendGameInfo.instance.GetPrivateContents("GameMoney", "Gold", 

            () => { gold = int.Parse(BackendGameInfo.instance.serverDataList[0]); if (callback != null) callback(); },

            () => { gold = 0; Param goldParam = new Param(); goldParam.Add("Gold", 0); BackendGameInfo.instance.PrivateTableUpdate("GameMoney", goldParam);  if (callback != null) callback(); });

    }

    [System.Obsolete]

    public void LoadCrystal(System.Action callback = null)

    {

        BackendGameInfo.instance.GetPrivateContents("GameMoney", "Crystal",

               () => {  crystal = int.Parse(BackendGameInfo.instance.serverDataList[0]);  if (callback != null) callback(); },

               () => {  crystal = 0; Param goldParam = new Param(); goldParam.Add("Crystal", 0); BackendGameInfo.instance.PrivateTableUpdate("GameMoney", goldParam); if (callback != null) callback(); });

    }


    public int GetUserGameMoeny(GameMoney gameMoney)

    {

        switch (gameMoney)

        {

            case GameMoney.골드:

                return gold;

            case GameMoney.크리스탈:

                return crystal;

        }

        return 0;

    }

}


BackendAuth.cs 스크립트도 조금 수정해준다.

using BackEnd;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

using UnityEngine.UI;


public class BackendAuth : MonoBehaviour

{

    public InputField id;

    public InputField password;


    public void CustomSignUp()

    {

        BackendReturnObject bro = Backend.BMember.CustomSignUp(id.text, password.text);


        if (bro.IsSuccess())

        {

            Debug.Log("회원가입 완료");

            CustomLogin();

            Nickname();

            UserInfo.instance.UserInfoLoad(()=> { SceneMove(); });

        }

        else

        {

            switch (bro.GetStatusCode())

            {

                case "409":

                    Debug.Log("중복된 customId 가 존재하는 경우");

                    CustomLogin();

                    UserInfo.instance.UserInfoLoad(() => { SceneMove(); });

                    break;

                case "403":

                    Debug.Log("출시설정이 테스트 인데 AU가 10을 초과한 경우");

                    break;

            }

        }

    }


    void CustomLogin()

    {

        BackendReturnObject bro = Backend.BMember.CustomLogin(id.text, password.text);

        if (bro.IsSuccess())

        {

            Debug.Log("로그인 완료");

        }

        else

        {

            switch (bro.GetStatusCode())

            {

                case "401":

                    Debug.Log("존재하지 않는 아이디의 경우 or 비밀번호가 틀린 경우");

                    break;

                case "403":

                    Debug.Log("차단당한 유저인 경우 or 출시설정이 테스트 인데 AU가 10을 초과한 경우");

                    break;

            }

        }

    }


    void Nickname()

    {

        Backend.BMember.CreateNickname(id.text);

    }


    void SceneMove()

    {

        SceneManager.LoadScene("로비");

    }

}


유저정보를 닉네임과 게임머니들을 서버에서 불러오도록했다.

만약 서버에 불러올려는 게임 정보가 없다면 자동으로 0값이 저장되어 진다.

데이터를 불러오는 데 성공하면 로비씬으로 이동하도록 변경하였다. 


그리고 잘 데이터가 불러와 졌는지 확인해보자 

게임을 시작하고 로그인을 한 후 디버그 창에 이런식으로 찍히고 로비로 넘어가진다.

img.jpg


뒤끝 콘솔에서 값을 변경한뒤 다시 디버깅해보자

img.jpgimg.jpg

크리스탈이 10000으로 제대로 나온것이 확인할 수 있었다.