차트 - 2

차트정보를 로드시키는 로딩씬을 따로 만들었다. 

img.jpg

로딩씬으로 넘어오기 위한 코드를 위해 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();

            SceneMove();

        }

        else

        {

            switch (bro.GetStatusCode())

            {

                case "409":

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

                    CustomLogin();

                    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("로딩");

    }

}


로딩을 구현하기 전에 차트부터 정리하고 가자 


img.jpg

4개의 차트를 만들었으니 4개의 스크립트를 만들었다. 

안의 코드는 이름만 다르지 다 비슷해서 하나의 스크립트 코드로만 적어두겠다. 

using BackEnd;

using LitJson;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class BoxChart : MonoBehaviour

{

    public static BoxChart instance;

    private void Awake() { instance = this; }


    const string field = "9357";

    public BoxChartInfo[] boxChartInfos;


    [System.Obsolete]

    public void LoadChart(System.Action callback)

    {

        BackendAsyncClass.BackendAsync(Backend.Chart.GetChartContents, field, (backendCallback) => {


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

            boxChartInfos = new BoxChartInfo[jsonData.Count];


            for (int i = 0; i < jsonData.Count; i++)

            {

                JsonData rowData = jsonData[i];


                boxChartInfos[i].name = rowData["Name"]["S"].ToString();

                boxChartInfos[i].dice01Grade = (DiceGrade)System.Enum.Parse(typeof(DiceGrade), rowData["DiceGrade01"]["S"].ToString());

                boxChartInfos[i].dice01Number = int.Parse(rowData["DiceGrade01Number"]["S"].ToString());

                boxChartInfos[i].dice02Grade = (DiceGrade)System.Enum.Parse(typeof(DiceGrade), rowData["DiceGrade02"]["S"].ToString());

                boxChartInfos[i].dice02Number = int.Parse(rowData["DiceGrade02Number"]["S"].ToString());

                boxChartInfos[i].dice03Grade = (DiceGrade)System.Enum.Parse(typeof(DiceGrade), rowData["DiceGrade03"]["S"].ToString());

                boxChartInfos[i].dice03Number = int.Parse(rowData["DiceGrade03Number"]["S"].ToString());

                boxChartInfos[i].dice04Grade = (DiceGrade)System.Enum.Parse(typeof(DiceGrade), rowData["DiceGrade04"]["S"].ToString());

                boxChartInfos[i].dice04Number = int.Parse(rowData["DiceGrade04Number"]["S"].ToString());

                boxChartInfos[i].gold = int.Parse(rowData["Gold"]["S"].ToString());

            }


            if (callback != null) callback();

        });

    }

}

[System.Serializable]

public struct BoxChartInfo

{

    public string name;

    public DiceGrade dice01Grade;

    public int dice01Number;

    public DiceGrade dice02Grade;

    public int dice02Number;

    public DiceGrade dice03Grade;

    public int dice03Number;

    public DiceGrade dice04Grade;

    public int dice04Number;

    public int gold;

}

엑셀의 정보 하나를 구조체 하나로 만들어서 그것을 배열에다가 정보를 모두 담았다. 

LoadChart 함수로 모든 정보를 다 담으면 콜백하도록 만들었다. 


이제 로딩 코드다.


using BackEnd;

using LitJson;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;


public class Loading : MonoBehaviour

{

    AsyncOperation operation;

    public void Start()

    {

        LoadScene();

    }


    public void LoadScene()

    {

        StartCoroutine(LoadSceneCoroutine());

    }


    [System.Obsolete]

    IEnumerator LoadSceneCoroutine()

    {

        yield return null;

        operation = SceneManager.LoadSceneAsync("로비");

        operation.allowSceneActivation = false;

        while (!operation.isDone)

        {

            yield return null;

            UserInfo.instance.UserInfoLoad(() => {

                BoxChart.instance.LoadChart(() => {

                    DiceChart.instance.LoadDiceChart(() => {

                        DayShopChart.instance.LoadDayShopChart(() => {

                            RandomBoxShopChart.instance.LoadRandomBoxShopChart(() => {

                                operation.allowSceneActivation = true;

                            });

                        });

                    });

                });

            });

            break;

        }

    }

}

비동기로 로드를 하도록 했고 모든 차트가 다 로드가 되면 자동으로 다음 씬으로 넘어갈 것이다.

재대로 작동이 됬는지 확인하기 위해 인스펙터 창에 데이터가 나타나도록 만들었다.

결과를 보니 정상적으로 차트를 불러오고 있었다.


img.gif