[UNITY],[C#]/TIL : UNITY

옵저버 패턴 (Observer Pattern)

네,가능합니다 2024. 10. 13. 15:33

성장하고 싶은 나는 샤워하거나 씻을때 유튜브 Unity korea 에서 제공하는 디자인패턴에 관한 TIP들을 보는데, 옵저버 패턴이란 내용이 나와서 블로그에 정리해보기로 했다.

 

옵저버 패턴이란 ?

한 객체의 상태가 변경될때, 이를 의존하는 다른 객체들에게 자동으로 알림을 보내는 패턴입니다.

(게임개발에서는 이벤트 시스템 혹은 UI업데이트에 주로 사용됩니다.)

 

한번 예시코드를 작성해 보도록 하겠습니다.

 

코드의 흐름을 이렇게 이해하면 쉽게 이해할 수 있습니다.

 

이벤트를 등록 > 이벤트를 구독(메서드) > 이벤트를 발생 > 이벤트를  구독하는 메서드를 호출

 

public class Player : MonoBehaviour
{
    // 이벤트를 등록
    public static event Action<int> OnHealthChanged;
    private int health = 100;
	//TakeDamage(int damage)메서드가 호출되면 health에 damage를 주고 이벤트를 발생시킴
    public void TakeDamage(int damage)
    {
        health -= damage;
        // 체력 변경 시 이벤트 발생
        OnHealthChanged?.Invoke(health)
    }
}
// UI클래스
public class HealthUI : MonoBehaviour
{
    // 게임 오브젝트가 활성화될 때 이벤트 구독
    void OnEnable()
    {
        Player.OnHealthChanged += UpdateHealth;
    }

    // 게임 오브젝트가 비활성화될 때 이벤트 구독 해제
    void OnDisable()
    {
        Player.OnHealthChanged -= UpdateHealth;
    }

    // 플레이어의 체력이 변경될 때 호출되는 메서드
    void UpdateHealth(int currentHealth)
    {
        // 체력 정보를 UI에 표시 (환경에 맞는 코드로 변경)
        Debug.Log($"Player Health: {currentHealth}");
    }
}

 

 

끗!