중복으로 작성해야 되는 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();
}
}
}
댓글 없음:
댓글 쓰기