2025. 2. 28. 15:32ㆍ게임 엔진/유니티
옵저버 패턴?
옵저버란 관찰자를 의미한다. 객체 상태를 관찰하다가 특정 이벤트가 발생할 때, 관찰자는 해당 이벤트와 관련된 다른 클래스에게 신호를 보내주는 역할을 한다.
관찰자 = 모든 클래스에서 주고받을 수 있도록 전역 클래스로 선언
특정 이벤트 = 개발자가 미리 만들어둔 특정 상태 ( 공격 시, 사망 시, 아이템 장착 시 등등)
작동 방식
옵저버는 등록, 보내기 라는 2가지 동작방식을 통해 작동된다.
공격시 스킬이 작동되도록 하는 기능을 만들려고 할 때 동작하는 방식이다.
1.스킬 클래스에서 이벤트 함수 등록
2.플레이어 클래스에서 공격 시점을 옵저버에게 보냄
3.옵저버는 미리 등록된 스킬 클래스에게 신호를 보냄
4. 스킬 클래스에서 함수 실행
장단점
이 패턴을 사용하면, 클래스의 연결성을 낮출 수 있고, 확장성이 용이하며, 사용하기 간편하다.
다만 호출하는 간격이 너무 잦으면 최적화에 문제가 될 수 있다.
적용 코드
옵저버 역할을 하는 EventManager를 제네릭으로 선언한다.
(해당 기능을 이용할 때 상태를 직접적으로 알기 쉽고, 상태에 따른 같은 기능을 하는 함수가 많아지는걸 방지할 수 있다.)
스킬을 동작시키는 클래스에서 이벤트를 등록한다. 무기에 스킬이 있기 때문에, 공격 시와 무기 장착시 두 개를 등록했다.
해제를 통해 사용하지 않는 이벤트는 지워주는게 좋다.
등록을 마치면 신호가 올 때마다 해당 함수를 실행 시켜줄 수 있다.
이제 플레이어 클래스에서 공격하는 함수 안에다 Send함수를 추가한다. 이제부터는 공격 마다 옵저버에게 공격 이벤트를 게속적으로 보내준다.
이벤트에 걸어두었던 함수가 실행이 된다.
'게임 엔진 > 유니티' 카테고리의 다른 글
[유니티] 버튼 클릭에 누른 상태도 적용하기 (0) | 2025.03.06 |
---|---|
[유니티] Text 색상 변경하기 (0) | 2025.03.03 |
[유니티] 코루틴 WaitUntil (1) | 2024.11.28 |
[유니티] 애니메이션 클립에 함수 넣기 (0) | 2024.11.26 |
[유니티] 딕셔너리 (Dictionary) (0) | 2024.11.23 |