1. ShopChest의 스크립트의 구조
2. UIChestCell과 UICestCellAd 스크립트 생성
3. UIChestCell 작성
4. UICestCellAd 스크립트 작성 (UIChestCell 상속)
5. AD가 있는 Wooden Chest에 UIChestCellAd 스크립트를 연결해주고, 스크립트 인스턴스들을 해당 Chest에 맞게 수치 수정 및 오브젝트 연결
6. 나머지 Chest에는 UIChestCell 스크립트 연결 및 수치와 오브젝트 연결
7. 콘솔 창에 버튼 클릭 이벤트를 통해 로그가 잘 나오는지 확인
8. 1번 그림의 구조대로 UIChestCell들을 관리할 UIChestScrollView 스크립트 생성
9. UIChestScrollView 작성
10. UIChestScrollView에 맞추어 UIChestCell, UIChestCellAd 스크립트 수정
11. 작성한 UIChestScrollView를 scrollView에 부착하고, Cell들을 연결해준다.
12. 콘솔 창에서 디버그 로그를 통해 잘 작동되는지 확인

 

 

+++

 

람다와 대리자를 통해 이벤트 처리와 콜백을 구현해보기

13. 결과 화면

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UIChestScrollView : MonoBehaviour
{
    [SerializeField]
    private UIChestCell[] cells;

    void Start()
    {
        for (int i = 0; i < cells.Length; i++)
        {
            UIChestCell cell = cells[i];
            cell.onClickPrice = () => {
                Debug.LogFormat("<color=red>{0}, {1}</color>", cell.ChestType, cell.Price);
            };

            var chestType = (UIChestCell.eChestType)i;
            if (chestType == UIChestCell.eChestType.Wooden)
            {
                var cellAd = (UIChestCellAd)cell;
                cellAd.onClickAd = () =>
                {
                    Debug.LogFormat("<color=blue>{0}, 광고보기</color>", cell.ChestType);
                };
            }

            cell.Init();
        }
    }
}

14. UIChestScrollView 스크립트

using System.Collections;
using System.Collections.Generic;
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;

    public eChestType ChestType
    {
        get
        {
            return this.chestType;
        }
    }

    public int Price => price;

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


    public System.Action onClickPrice;

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

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

}

15. UIChestCell 스크립트

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()
    {
        base.Init();

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

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

16. UIChestCellAd 스크립트

+ Recent posts