안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2024년 12월 25일 수요일

[유니티][Unity][Copilot] UI 조작하는 클래스에서 조작한 데이터가 UI에 변경되지 않은 이유

 중복으로 작성해야 되는 UI 변경 코드를 한번만 쓰기 위해서 별도 class에 작성하였는데,

이 class에서 UI를 변경해도 결과가 반영이 되지 않았다.

 왜 이런가 고민하다 살펴보니 이 class에는 monobehaviour를 상속받지 않아서 발생하는 것이었다. 

 이를 해결하기 위해서는 아래와 같이 monobehaviour가 없는 class에 그릴려고 하는 UI가 있는 class를 상속받아서 그려주는 식으로 처리를 하면 된다고 한다.


 아래와 같이 작성하면 된다.

// 비 MonoBehaviour 클래스

public class DataProcessor

{

    private UIManager uiManager;


    public DataProcessor(UIManager manager)

    {

        uiManager = manager;

    }


    public void ProcessData()

    {

        // 데이터 처리 후 UI 변경

        uiManager.UpdateUI("Processing Complete", someSprite);

    }

}


// MonoBehaviour 클래스

public class UIManager : MonoBehaviour

{

    public Text myText;

    public Image myImage;


    void Start()

    {

        if (myText == null || myImage == null)

        {

            Debug.LogError("UI components are not assigned!");

        }

    }


    public void UpdateUI(string newText, Sprite newSprite)

    {

        if (myText != null)

        {

            myText.text = newText;

        }


        if (myImage != null)

        {

            myImage.sprite = newSprite;

        }

    }

}


// 게임 관리 클래스

public class GameManager : MonoBehaviour

{

    public UIManager uiManager;

    private DataProcessor dataProcessor;

    public Sprite someSprite;


    void Start()

    {

        dataProcessor = new DataProcessor(uiManager);

    }


    void Update()

    {

        if (Input.GetKeyDown(KeyCode.Space))

        {

            dataProcessor.ProcessData();

        }

    }

}

**본 문은 Microsoft Copilot의 도움을 받아 제작되었습니다.
 새로 만든 Image가 조작한 Image를 가리고 있어서 Image 변경이 안 된 걸로 보였더군요. 본문에 있는 방법이 아니라 다른 방법을 통해 Monobehaviour가 없는 클래스에서도 UI 컨트롤이 가능합니다. 하는 방법은 아래 링크 참조바랍니다.

댓글 없음:

댓글 쓰기