게임개발 캠프 27일차

IIRU·2026년 6월 23일

Scene

두개의 씬을 전환하면서 하는 경우가 많이 생긴다.

PopupManager / SceneChanger 를 create empty로 만들어줌.

SceneChanger.cs

using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneChanger : MonoBehaviour
{
    public static SceneChanger instance;

    private void Awake()
    {
        if(instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
        DontDestroyOnLoad(gameObject);
    }

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {

    }

    public void LoadScene()
    {
        //SceneManager.LoadScene("SampleScene");

        ////재시작 오타 방지
        //Scene scene = SceneManager.GetActiveScene();
        //SceneManager.LoadScene(scene.name);

        //씬 번호 이용
        int sceneNum = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(sceneNum + 2);

    }
}

SceneChanger는 싱글톤으로 구현하였음.
장면 전환이 되면서 계속 instance가 새로 만들어지기 때문에 DontDestroyOnLoad를 사용하여 장면이 전환되도 계속 남아있도록 하였음.

계속 남아있는 것을 확인할 수 있다.


버튼 Onclick에 장면전환 함수를 넣는 방법.

PopupManager.cs

using UnityEngine;

public class PopUpManager : MonoBehaviour
{
    [SerializeField] GameObject normalPopup;
    [SerializeField] Canvas canvas;
    [SerializeField] Transform popupParent;
    public GameObject dim;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    public void OpenNormalPopup(string title)
    {
        Popup p = Instantiate(normalPopup, popupParent).GetComponent<Popup>();
        dim.SetActive(true);
        p.SetPopupText(title, "Description");
    }

이 스크립트를 PopupManager에 등록해준 후

아래와 같이 등록을 해준다.
(버튼을 누르면 화면이 어두워지게 하는것이 dim이다. dim은 이미지를 투명하게 만들어놓은거라 뒤에 있는 버튼이 눌러지지 않는다.)

팝업은 미리 Prefab에 만들어둔다.

Scrollview


스크롤뷰를 크기에 맞게 만들어주고


content에서

vertical Layout이나 Horizontal Layout을 설정해주자.
(Grid도 있지만 연산량이 크다고 한다.)

scrollview.cs

using NUnit.Framework;
using TMPro;
using UnityEngine;

public class ScrollView : MonoBehaviour
{

    public GameObject rank;
    public Transform content;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        if(RankDB.instance.ReturnRank().Count > 0)
        {
            CreateRank();
        }
       
    }

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

    public void CreateRank()
    {
        //RankDB.instance.ReturnRank().Sort();
        for(int i=0; i< RankDB.instance.ReturnRank().Count; i++)
        {
            GameObject r = Instantiate(rank, content);
            RankItem item = r.GetComponent<RankItem>();
            if (item != null)
            {
                item.SetData($"{(i + 1).ToString()}.", 
                    RankDB.instance.ReturnRank()[i].ToString());

            }
        }
        
    }

}

넣을 프리팹이랑 넣을 위치인 content를 정해줘야한다.

제대로 들어간 것을 확인

profile
초보 개발자 블로그입니다!

0개의 댓글