유니티

[유니티] UI 리스트 구현

redcaramel 2026. 5. 13. 21:44

(StagePanelUI.cs)

TextMeshPro, Button에 접근하기 위해 아래 코드로 import한다.

using TMPro;
using UnityEngine.UI;
using System;

 

Text 참조는 아래 코드로 수행한다. 

[SerializeField] private TextMeshProUGUI stageIndex;
[SerializeField] private TextMeshProUGUI stageName;
[SerializeField] private Button startButton;
 
public void Init(string index, string stageName, Action startBtnAction)
    {
        stageIndex.text = index;
        this.stageName.text = stageName;
        startButton.onClick.AddListener(() =>
        {
            startBtnAction.Invoke();
        });
    }

(startButton init은 lamda함수를 이용해 입력받은 Action을 수행한다.)

 

(TitleUI.cs)

이제 이렇게 만든 Panel Init 클래스를 titleUI 코드에서 일괄 호출한다.

    [SerializeField] private GameObject stagePanelPrefab;
    [SerializeField] private Transform contents;
    [SerializeField] private List<StagePanelUI> stagePanels = new();

다중의 StagePanelUI 객체를 저장할 List를 만든다.

 

이때, Stage 자료를 저장하기 위한 ScriptableObject 코드를 만든다.

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

[CreateAssetMenu(fileName = "StageData", menuName = "Scriptable Objects/StageData")]
public class StageData : ScriptableObject
{
    public List<_StageData> stageDataList = new List<_StageData>();
}

[Serializable]
public class _StageData
{
    public string StageIndex;
    public string StageName;
    public string SceneName;
}

이때 하나하나의 원소로 담을 클래스는 pure C#으로, 인스펙터에서 편집하려면 [Serializable] 속성을 달아야 한다.

 

 

추가로 에셋 폴더에 Scriptable Object를 추가한다.

 

(TitleUI.cs)

이제 title화면의 요소들을 초기화할 수 있도록 init메소드를 만든다.

void Start()
    {
        Init();
    }

    private void Init()
    {
        foreach (var data in stageData.stageDataList)
        {
            GameObject stagePanel = Instantiate(stagePanelPrefab, contents);
            stagePanel.transform.SetParent(contents);
            stagePanels.Add(stagePanel.GetComponent<StagePanelUI>());
            stagePanel.GetComponent<StagePanelUI>().Init(data.StageIndex, data.StageName, () => { SceneManager.LoadScene(data.SceneName);});
        }
    }

 

'유니티' 카테고리의 다른 글

[유니티] 저장  (0) 2026.05.13
[유니티] UI 팝업 구현  (0) 2026.05.13
[유니티] Canvas and UI  (0) 2026.05.13
[유니티] Audio Source  (0) 2026.05.12
[유니티] Prefabs  (0) 2026.05.12