글 작성 이유
믹스마스터 프로젝트 작업 중, 플레이어의 체력이 감소하거나 경험치 Bar가 증가하는 기능을 구현해야 했다. 핵심은 플레이어 객체의 상태가 변경될 때 다른 요소들이 이에 반응하도록 만드는 것 이다. 이를 위해 이전에 학습했던 옵저버 패턴을 활용해 해당 기능을 구현해 보았다 옵저버 패턴 정리한 내용은 아래 링크를 참고
2025.01.19 - [Unity C#/디자인패턴] - 유니티 옵저버 패턴 정리 (디자인 패턴)
유니티 옵저버 패턴 정리 (디자인 패턴)
📌옵저버 패턴 정의한 객체의 `주체(Subject)의 상태가 변경`되었을 때, 이를 `의존하는` 다른 옵저버(Observers)가 자동으로 통보를 받고 업데이트되도록 하는 디자인 패턴.장점느슨한 결합: Subject와
cherry22.tistory.com
구현 과정
옵저버 패턴의 핵심은 주체의 상태가 `변경`될 때 이를 의존하는 옵저버들에게 `자동으로 통보`되어 업데이트되도록 하는 데 있습니다. 따라서 주체와 옵저버를 명확히 구분하고, 옵저버가 주체에 의존할 수 있도록 로직을 설계하는 데 중점을 두어 코드를 작성했습니다.
[ Subject ]
먼저 Action 이벤트를 주체 객체인 캐릭터 스크립트에서 선언합니다.

[Observer]
플레이어 상태 변경 시 통보를 받을 수 있도록, HP와 Exp 데이터를 관리하는 옵저버 객체가 주체(Subject)에 접근해 이벤트에 구독합니다.

UpdateHp와 UpdateExp는 상태 변경에 대한 통보만 받기 때문에 이를 기반으로 비즈니스 로직을 작성합니다.


최종적으로 몬스터가 플레이어를 공격해서 플레이어 객체의 이벤트가 실행 되면 OnStatsChanged를 구독한 UpdateHp 콜백함수가 호출되어 UI가 변경됩니다. (Exp도 마찬가지)

결과

주의사항
이벤트를 구독한 부분이 있으면 OnDisable 에서 구독 해제 하는 부분도 작성을 해야한다 메모리 누수가 있을 수 있으니.. 미리 방지하자
private void OnDisable()
{
character.OnStatsChanged -= UpdateHp;
character.OnExpChanged -= UpdateExp;
}
'유니티 > 구현내용정리' 카테고리의 다른 글
| 이 코드에 도달하기까지 어떤 함수 호출을 탔는지"를 3단계까지만 출력하는 디버깅용 코드 (0) | 2025.04.28 |
|---|---|
| 유니티 방치형 프로젝트 - Render Texture 활용 하기 (#2 페이드 인아웃) (0) | 2025.03.26 |
| 유니티 방치형 프로젝트 - Render Texture 활용 하기 (0) | 2025.03.26 |
| 유니티 방치형 프로젝트 - 영웅 팝업 Open/Close(Stack 이용하기) (0) | 2025.03.25 |
| 유니티 방치형 프로젝트 - 인벤토리 같이 스크롤 적용되는 영웅 슬롯 UI 구현하기. (1) | 2025.03.25 |
