MonoBehaviour를 사용하지 않는 클래스에서도 UI 변경을 할 수가 있었다. 그 방법은 해당 클래스를 MonoBehaviour의 Start나 Update 에 올리는 것이다. Unity에서는 Unity 엔진에 의해 UI 요소들이 그려지는데, Start Update 내에 올려 놓으면 자동으로 처리하는 방식이기 때문이다.
참조가 올바르게 설정되어 있음:
MonoBehaviour
가 없는 클래스에서Image
를 변경할 때, 해당Image
에 대한 참조가 올바르게 설정되어 있기 때문에 변경된 사항이 반영됩니다.
Unity의 업데이트 루프:
Unity의 렌더링 파이프라인은 매 프레임마다 UI 요소를 업데이트합니다. 따라서 UI 요소가 변경되면, 그 변경 사항이 다음 렌더링 프레임에 반영됩니다.
UI 요소의 자동 갱신:
Image
와 같은 UI 요소는 Unity에 의해 자동으로 갱신됩니다. 따라서MonoBehaviour
의Update
메서드에서 주기적으로 상태를 확인하고 업데이트할 필요가 없습니다.
예제 코드
UIManager 클래스 (MonoBehaviour
를 상속)
using UnityEngine;
using UnityEngine.UI;
public class UIManager : MonoBehaviour
{
public Image healthBar;
private Player player;
private void Start()
{
player = new Player();
player.ChangeHealthBar(healthBar, Color.green);
}
private void Update()
{
// 매 프레임마다 UI를 자동으로 갱신합니다.
// 이는 Unity 엔진이 관리합니다.
}
}
Player 클래스 (MonoBehaviour
를 상속하지 않음)
using UnityEngine.UI;
using UnityEngine;
public class Player
{
public void ChangeHealthBar(Image healthBar, Color color)
{
if (healthBar != null)
{
healthBar.color = color; // Image의 색상을 변경
}
}
}
설명
UIManager 클래스:
MonoBehaviour
를 상속받아 Unity의 생명 주기 메서드를 사용합니다.Start
메서드에서Player
클래스를 인스턴스화하고,Player
클래스의 메서드를 호출하여Image
색상을 변경합니다.
Player 클래스:
MonoBehaviour
를 상속받지 않지만Image
에 대한 참조를 받아서 직접 변경합니다.
이로 인해, MonoBehaviour
가 없는 클래스에서 변경한 Image
도 MonoBehaviour
의 Update
메서드에서 정상적으로 반영되는 것입니다. 중요한 점은 Image
컴포넌트에 대한 참조가 올바르게 설정되고, Unity의 렌더링 파이프라인이 이를 자동으로 처리한다는 것입니다.
**본 문은 Microsoft Copilot의 도움을 받아 제작되었습니다.
댓글 없음:
댓글 쓰기