1. 오늘의 할 일
Item을 먹으면 UI에 반영하고 싶다.
이건 쉬운데,
그 Item. Update로 하니까 계속해서 불러낸다.
편하긴 한데, 가만히 두면 Debug 로그만 8000개 넘게 쌓이니까 어떻게든 처리하고 싶다...
2. 그래서 사용한 것. event Action
그래서 찾아보니까 event Action 이라고, 행동이 발생할 때만 불러낼 수 있는 코드가 있었다.
public static event Action OnItemCountChanged;
이번 프로젝트에서는 이렇게 작성했다.
명칭이 제법 재미있다. 제공자와 구독자라는 단어를 쓴다.
제공자: 행동이 발생하면 구독자에게 알림
구독자: 알림설정 해두고 알림이 울리면 반응함
심지어 구독은 += , 구독 취소는 -=로 한다.
아래와 같은 형태로 작동한다.
private void OnEnable()
{
Item.OnItemCountChanged += UpdateUI; //이벤트에 접근하면 활성화
UpdateUI();
}
private void OnDisable()
{
Item.OnItemCountChanged -= UpdateUI; //처리가 끝나면 다시 비활성화
}
이러면 UpdateUI는 OnItemCountChanged가 발생할 때마다 구독 - 호출된 후, 그에 따른 처리를 한 뒤 다시 구독 취소를 한다.
(이를 통해 중복해서 처리되는 걸 방지한다.)
그럼 이벤트가 발생할 때마다, Item.cs에서
public static void ChangeFishCount(int delta)
{
FishCount += delta; //delta는 FishCount를 변경하는 변수.
OnItemCountChanged?.Invoke();
}
위와 같은 형태의 함수를 불러들인다.
FishCount의 숫자가 변경되니 ItemCountChanged 이벤트가 호출되고, 그럼 그 순간에 UpdateUI가 실행된 뒤 안전하게 종료된다.
3. 정리
서툴게 사용한 것이긴 하지만, 괜히 Update로 계속 변화를 확인하게 하는 것보다는 안정적이고 좋아보였다.
구독과 구독 취소라는 형태라 재미있다는 생각도 조금 들었다.
아직은 기본만 알고 얼기설기 따라 쓴 느낌이지만, 액션(특정 로직의 실행)에 따라 알맞게 구독되어 스크립트가 작동해서 1회 실행하고 멈추는 게 제법 마음에 든다.
'Unity_본캠프' 카테고리의 다른 글
[내일배움캠프 28일차] 델리...케이트...람...다? (0) | 2025.05.16 |
---|---|
[내일배움캠프 24일차] 생각보다 길은 단순함에 있다 (1) | 2025.05.12 |
[내일배움캠프 23일차] Unity팀 프로젝트: 트랩 / 클리어용 아이템 (0) | 2025.05.09 |
[내일배움캠프 22일차] 뭐라고요 string이 반환이 된다고 (0) | 2025.05.08 |
[내일배움캠프 21일차] 유니티 입문 특강 개인프로젝트 (0) | 2025.05.07 |