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

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.크리스탈)); } } |
결과 확인

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

주사위 차트 스크립트를 수정해서 이 아틀라스 이미지 자리를 만들었다.
그리고 주사위 이름과 주사위 등급에 따라 주사위를 가져올 수 있도록 만들었다.

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); } } } |
일일 상점의 남은시간을 표시해주는 텍스트와 가격표기가 잘 적용됬다.

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

다음에 할 것은 일일상점이 시간이 지나거나 리트라이 버튼을 누르면 상품들이 바뀌도록 하는 것과
실질적으로 구매를 해서 유저정보에 저장이 되도록 할 것이다.
여기서 생각을 좀 해야할 것은 일일 상점 상품들이 바뀌는데 앱을 재시작 할 때마다 상품이 그대로 고정이 되야하고 시간이 지나야만 상품들이 변해야 한다는 것이다.
형님 게임씬에서 내 필드랑 상대 필드 나눠서 보이게 하는건 어떻게 했습니까?