1. chest_data.xlsx 테이블 데이터 생성
2. chest_data.xlsx를 토대로 메모장에 chest_data.json파일 생성
3. Project에 Resources 폴더를 생성하고, 만든 chest_data.json 파일을 넣어주자
4. Package Manager에서 Newtonsoft Json 임포트
5. 데이터 역직렬화를 위한 ChestData 스크립트 생성 및 작성
6. chest_data를 로드하기 위한 DataManager를 생성 후, 싱글톤으로 작성
7. 상자 이미지를 패킹할 UIAtlas(Atlas) 생성
8. 상자 이미지들을 찾아 UIAtals의 Objects for Packing에 연결
9. UIAtals의 Allow Rotation, Tight Packing을 체크 해제하고, Padding을 8로 수정
10. UIChestScrollView에 atlas를 인스턴스로 선언
11. UIscrollView에 UIAtlas를 연결
12. 프로젝트 내에서 관리 및 로드를 하기 위해 AtlasManager(Create Empty)를 생성
13. AtlasManager 스크립트를 싱글톤으로 작성

***

Destroy(this) = 해당 스크립트를 파괴

Destroy(this.gameObject) = 해당 스크립트가 부착되어있는 게임 오브젝트 파괴

***

 

14. AtlasManager 스크립트를 AtlasManager에 부착한 후, UIAtlas를 Resources 폴더로 이동. 그리고 스크립트에 UIAtlas의 이름을 입력
15. 게임이 시작될 때 아틀라스 리소스들을 로드하기 위한 Test05UIMain 스크립트를 생성 후, Test05UIMain(Canvas)에 부착
16. Test05UIMain 스크립트 작성
17. 씬 실행시 콘솔 창에서 아틀라스 로드 확인

 

 

+++++++

동적으로 파일 로드해서 UIChestCell 로드 해보기

 

18. 프리팹으로 동적생성 하기위해 기존의 ChestCell들을 모두 제거
19. 동적 생성될 프리팹(ChestCell, ChestCellAd)를 제작 후, 프리팹으로 생성(프리팹 생성후 Hierarchy에 있는 프리팹은 제거)

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class UIChestCell : MonoBehaviour
{
    public enum eChestType
    {
        Wooden,
        Silver,
        Golden,
        Epic,
        Legendary
    }

    [SerializeField]
    protected Button btnPrice;

    [SerializeField]
    protected eChestType chestType;

    [SerializeField]
    protected int price;

    [SerializeField]
    private TMP_Text txtName;

    [SerializeField]
    private Image icon;

    [SerializeField]
    private TMP_Text txtPrice;


    public eChestType ChestType
    {
        get
        {
            return chestType;
        }
    }


    public int Price => price;
    //public int Price  -> 동일한 기능을 하는 코드
    //{
    //    get { return this.price; }
    //}


    public System.Action onClickPrice;

    public virtual void Init(ChestData data)
    {
        Debug.LogFormat("[UIChestCell] Init : {0}", this.chestType);

        price = data.price;
        txtName.text = data.name;
        txtPrice.text = price.ToString();
        chestType = (eChestType)data.type;

        var atlas = AtlasManager.instance.GetAtlas("UIAtlas");
        icon.sprite = atlas.GetSprite(data.sprite_name);
        icon.SetNativeSize();

        btnPrice.onClick.AddListener(() => {
            Debug.LogFormat("{0}, {1}", this.chestType, this.price);
            onClickPrice();
        });
    }


}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIChestCellAd : UIChestCell
{
    [SerializeField]
    private Button btnAd;
    public System.Action onClickAd;

    public override void Init(ChestData data)
    {
        base.Init(data);

        Debug.LogFormat("[UIChestCellAd] Init : {0}", chestType);

        this.btnAd.onClick.AddListener(() => {
            Debug.LogFormat("{0}, 광고보기", chestType);
            onClickAd();
        });
    }
}

20. 프리팹의 클릭 이벤트를 제어할 스크립트를 생성 후, 각각의 프리팹에 부착

21. 동적 생성을 위해 UIChestScrollView 스크립트 수정
20.씬 실행시 chest_data를 로드하기 위해 DataManager, Test05UIMain 스크립트 수정
21. scrollView의 인스턴스 연결
22. 씬 실행 후, 데이터 연동을 통한 ChestCell 동적 생성 확인

 

+ Recent posts