상점기능


로비로 다시 돌아와서 로비가 시작되면 바로 유저정보가 반영이 되도록 부터 해두자.

img.jpg


UserInfoUI.cs 스크립트를 하나 작성


using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;


public class UserInfoUI : MonoBehaviour

{

public Text nicknameText;

public Text goldText;

public Text crystalText;


private void Start()

{

Setting();

}

public void Setting()

{

nicknameText.text = UserInfo.instance.nickname;

goldText.text = string.Format("{0:n0}", UserInfo.instance.GetUserGameMoeny(GameMoney.골드));

crystalText.text = string.Format("{0:n0}", UserInfo.instance.GetUserGameMoeny(GameMoney.크리스탈));

}

}

결과 확인

img.jpg

주사위 아틀라스스프라이트도 만들어주자

img.jpg

주사위 차트 스크립트를 수정해서 이 아틀라스 이미지 자리를 만들었다.

그리고 주사위 이름과 주사위 등급에 따라 주사위를 가져올 수 있도록 만들었다.

img.jpg

using BackEnd;

using LitJson;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.U2D;


public class DiceChart : MonoBehaviour

{

public static DiceChart instance;

private void Awake() { instance = this; }

public SpriteAtlas spriteAtlas;


const string field = "9356";

public DiceChartInfo[] diceChartInfos;


public DiceChartInfo GetDiceInfo(string diceName)

{

for (int i = 0; i < diceChartInfos.Length; i++)

{

if (diceChartInfos[i].name == diceName)

{

return diceChartInfos[i];

}

}

return new DiceChartInfo();

}

public List<DiceChartInfo> GetDiceInfo(DiceGrade diceGrade)

{

List<DiceChartInfo> diceChartInfoList = new List<DiceChartInfo>();

for (int i = 0; i < diceChartInfos.Length; i++)

{

if (diceChartInfos[i].diceGrade == diceGrade)

{

diceChartInfoList.Add(diceChartInfos[i]);

}

}

return diceChartInfoList;

}


[System.Obsolete]

public void LoadDiceChart(System.Action callback)

{

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


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

diceChartInfos = new DiceChartInfo[jsonData.Count];


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

{

JsonData rowData = jsonData[i];


diceChartInfos[i].name = rowData["Dice"]["S"].ToString();

diceChartInfos[i].diceGrade = (DiceGrade)System.Enum.Parse(typeof(DiceGrade), rowData["grade"]["S"].ToString());

diceChartInfos[i].diceSprite = spriteAtlas.GetSprite(diceChartInfos[i].name);

}


if (callback != null) callback();

});

}

}

[System.Serializable]

public struct DiceChartInfo

{

public string name;

public DiceGrade diceGrade;

public Sprite diceSprite;

}

일단 차트에 적힌 상점 정보들을 ui에 반영시키도록 한다,


using BackEnd;

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;


public class Shop : MonoBehaviour

{

public Scrollbar scrollbar;

[Header("일일상점")]

public Text dayShopRemainTimeText;

public Transform[] dayShopGoods;

int resetHour = 0; // 0~24

[Header("뽑기상점")]

public Transform[] randomBoxGoods;


private void Start()

{

scrollbar.value = 1;

StartCoroutine(DayShopRemainTimeCoroutine());

DayShopGoodsSetting();

RandomBoxShopSetting();

}


IEnumerator DayShopRemainTimeCoroutine()

{

WaitForSeconds dayShopRemainWaitTime = new WaitForSeconds(1);


while (true)

{

yield return dayShopRemainWaitTime;

DayShopRemainTime();

}

}


void DayShopRemainTime()

{

// 현재시간

BackendReturnObject servertime = Backend.Utils.GetServerTime();

string time = servertime.GetReturnValuetoJSON()["utcTime"].ToString();

DateTime currentDateTime = DateTime.Parse(time);


//남은시간 계산

TimeSpan remainTime = new TimeSpan();

if (currentDateTime.Hour >= resetHour)

{

DateTime nextTime = currentDateTime.AddDays(1);

nextTime = new DateTime(nextTime.Year, nextTime.Month, nextTime.Day, resetHour,0,0);

remainTime = nextTime.Subtract(currentDateTime);

}

else

{

DateTime nextTime = new DateTime(currentDateTime.Year, currentDateTime.Month, currentDateTime.Day, resetHour, 0, 0);

remainTime = nextTime.Subtract(currentDateTime);

}


dayShopRemainTimeText.text = "남은시간 " + remainTime.Hours + "시간" + remainTime.Minutes + "분" + remainTime.Seconds + "초";

}


void DayShopGoodsSetting()

{

for (int i = 0; i < dayShopGoods.Length; i++)

{

DayShopChartInfo dayShopChartInfo = DayShopChart.instance.dayShopChartInfos[i];


int r = UnityEngine.Random.Range((int)dayShopChartInfo.dice01Grade, (int)dayShopChartInfo.dice02Grade + 1);

DiceGrade randomDiceGrade = (DiceGrade)r;


List<DiceChartInfo> diceChartInfoList = DiceChart.instance.GetDiceInfo(randomDiceGrade);

r = UnityEngine.Random.Range(0, diceChartInfoList.Count);


dayShopGoods[i].Find("아이콘").GetComponent<Image>().sprite = diceChartInfoList[r].diceSprite;

dayShopGoods[i].Find("가격").GetComponent<Text>().text = string.Format("{0:n0}", dayShopChartInfo.price);

}

}


void RandomBoxShopSetting()

{

for (int i = 0; i < randomBoxGoods.Length; i++)

{

randomBoxGoods[i].Find("가격").GetComponent<Text>().text = string.Format("{0:n0}", RandomBoxShopChart.instance.randomBoxShopChartInfos[i].price);

}

}

}


일일 상점의 남은시간을 표시해주는 텍스트와 가격표기가 잘 적용됬다.


img.gif

뽑기 상점 또한 가격표기가 잘 적용됬다.

img.jpg



다음에 할 것은 일일상점이 시간이 지나거나 리트라이 버튼을 누르면 상품들이 바뀌도록 하는 것과

실질적으로 구매를 해서 유저정보에 저장이 되도록 할 것이다.

여기서 생각을 좀 해야할 것은 일일 상점 상품들이 바뀌는데 앱을 재시작 할 때마다 상품이 그대로 고정이 되야하고 시간이 지나야만 상품들이 변해야 한다는 것이다.