using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShopMain : MonoBehaviour
{
public UIShopDirector uiShopDirector;
void Start()
{
DataManager.instance.LoadShopData();
this.uiShopDirector.Init();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIShopDirector : MonoBehaviour
{
public UIShopScrollview uiShopScrollview;
public Button[] tapBtns;
public GameObject[] focusedTapMenu;
public GameObject[] rectScroll;
public void Init()
{
for(int i = 0; i < tapBtns.Length; i++)
{
int idx = i;
this.tapBtns[idx].onClick.AddListener(() =>
{
for(int j = 0; j < tapBtns.Length; j++)
{
this.focusedTapMenu[j].SetActive(false);
this.rectScroll[j].SetActive(false);
}
this.focusedTapMenu[idx].SetActive(true);
this.rectScroll[idx].SetActive(true);
});
}
this.uiShopScrollview.Init();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIShopScrollview : MonoBehaviour
{
public RectTransform[] contents;
public GameObject cellviewPrefab;
public void Init()
{
var list = DataManager.instance.GetShopDatas();
for(int i = 0; i < list.Count; i++)
{
var data = DataManager.instance.GetShopData(i + 100);
int idx = data.purchase_type;
var go = Instantiate(this.cellviewPrefab, contents[idx]);
go.GetComponent<UIScrollCellview>().Init(data.id);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.U2D;
public class UIScrollCellview : MonoBehaviour
{
public TMP_Text txtName;
public Image imgPurchase;
public GameObject[] btnTypes;
public TMP_Text[] txtPrices;
public void Init(int id)
{
var shopData = DataManager.instance.GetShopData(id);
this.txtName.text = shopData.name;
SpriteAtlas atlas = AtlasManager.instance.GetAtlasByName("UIShop");
Sprite sprite = atlas.GetSprite(shopData.sprite_name);
this.imgPurchase.sprite = sprite;
this.imgPurchase.SetNativeSize();
if (shopData.ad_type == 1)
{
this.btnTypes[0].SetActive(true);
this.txtPrices[0].text = shopData.price_tag;
}
else
{
this.btnTypes[1].SetActive(true);
this.txtPrices[1].text = shopData.price_tag;
}
}
}
사실 UI 디자인이나 기능적으로 더 디테일하게 만들 수 있는 여지가 있었지만 시간관계상 스크롤 뷰 구현만 하였다. 코드를 통해 ScrollRect 컴포넌트에 접근하여 content 값을 새로 저장하여 기능을 구현하보려고 했지만 RectTransform 타입을 제대로 입력하였음에도 NullReferenceException 오류가 발생하는 것을 해결하지 못했고, ScrollRect 컴포넌트를 가진 3개의 게임오브젝트를 생성하여 Active 값을 변경 해주는 것으로 해결하였다.
'C# > 수업 과제' 카테고리의 다른 글
Unity) [유니티 3D] 키보드, 마우스를 통한 이동과 레이캐스트를 통한 오브젝트 제어 (0) | 2023.02.22 |
---|---|
Unity) [유니티 UI] 옵션, 로그인 UI 구현 (0) | 2023.02.20 |
원형 큐에 대해 (0) | 2023.02.18 |
SpaceShooter2D (0) | 2023.02.12 |
UNITY) [유니티 UI] 타이틀 UI 구현 (0) | 2023.02.10 |