Unity/UIUX프로그래밍

0421_ UIStage

minquu 2021. 4. 21. 11:33
반응형

출처 - 장상욱 쌤

 

 

위와 같은 구조로 먼저 UI를 구성을 해준다.

 

 

UIStageItem(complete,  doing, lock이 들어가 있는)를 만들어서 프리팹을 해주고, 배치를 해준다.

 

 

----

 

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

public class UIStageItem : MonoBehaviour
{
    public enum eStageItemType { 
        COMPLETE, DOING, LOCK
    }
    public GameObject completeGo;
    public GameObject doingGo;
    public GameObject lockGo;
    public GameObject[] arrStars;
    public Text txtStageNo;
    private eStageItemType type;
    public void Init(eStageItemType type)
    {
        this.type = type;
        switch (this.type) {
            case eStageItemType.COMPLETE:
                {
                    this.completeGo.SetActive(true);
                    this.doingGo.SetActive(false);
                    this.lockGo.SetActive(false);
                }
                break;
            case eStageItemType.DOING:
                {
                    this.completeGo.SetActive(false);
                    this.doingGo.SetActive(true);
                    this.lockGo.SetActive(false);
                }
                break;
            case eStageItemType.LOCK:
                {
                    this.completeGo.SetActive(false);
                    this.doingGo.SetActive(false);
                    this.lockGo.SetActive(true);
                }
                break;
        }
    }
}

 

 

UIStageItem 스크립터를 만들어줘서 위와같이 

필요한 게임오브젝트를 받아주고, 그리고 init 초기화를 만들어줘서

이넘타입에 따라, 오브젝트의 상태를 껏다 켜주기를한다.

 

 

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

public class UIStage : MonoBehaviour
{
    public UIStageItem[] arrUIStageItems;
    private int maxStage = 36;
    // Start is called before the first frame update
    void Start()
    {
        for (int i = 0; i < this.arrUIStageItems.Length; i++) {
            var uiStageItem = this.arrUIStageItems[i];
            uiStageItem.txtStageNo.text = (i + 1).ToString();
            if (i < 5)
            {
                uiStageItem.Init(UIStageItem.eStageItemType.DOING);
            }
            else {
                uiStageItem.Init(UIStageItem.eStageItemType.LOCK);
            }
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

for를 돌려서 배열에 들어간 UIStageItems를 순회한다.

 

            var uiStageItem = this.arrUIStageItems[i];

uiStageItem 에 인덱스 별로 값을 받는다.

 

 uiStageItem.txtStageNo.text = (i + 1).ToString();
            if (i < 5)
            {
                uiStageItem.Init(UIStageItem.eStageItemType.DOING);
            }
            else {
                uiStageItem.Init(UIStageItem.eStageItemType.LOCK);
            }

 

StageNo.Text 에 숫자를 증가 시킨다.

if(i < 5)로 스테이지 5개를 연다 .

 

반응형