[유니티] 옵저버 패턴(Observer Pattern)을 활용해 적중 효과 만들기

2025. 2. 28. 15:32게임 엔진/유니티

옵저버 패턴?

옵저버란 관찰자를 의미한다. 객체 상태를 관찰하다가 특정 이벤트가 발생할 때, 관찰자는 해당 이벤트와 관련된 다른 클래스에게 신호를 보내주는 역할을 한다.

 

관찰자 = 모든 클래스에서 주고받을 수 있도록 전역 클래스로 선언

특정 이벤트 = 개발자가 미리 만들어둔 특정 상태 ( 공격 시, 사망 시, 아이템 장착 시 등등)

 

작동 방식

옵저버는 등록, 보내기 라는 2가지 동작방식을 통해 작동된다.

공격시 스킬이 작동되도록 하는 기능을 만들려고 할 때 동작하는 방식이다.

1.스킬 클래스에서 이벤트 함수 등록

2.플레이어 클래스에서 공격 시점을 옵저버에게 보냄

3.옵저버는 미리 등록된 스킬 클래스에게 신호를 보냄

4. 스킬 클래스에서 함수 실행 

 

 

장단점

이 패턴을 사용하면, 클래스의 연결성을 낮출 수 있고, 확장성이 용이하며, 사용하기 간편하다.

다만 호출하는 간격이 너무 잦으면 최적화에 문제가 될 수 있다.

 

 

적용 코드

옵저버 역할을 하는 EventManager를 제네릭으로 선언한다.

(해당 기능을 이용할 때 상태를 직접적으로 알기 쉽고, 상태에 따른 같은 기능을 하는 함수가 많아지는걸 방지할 수 있다.)

 

 

스킬을 동작시키는 클래스에서 이벤트를 등록한다. 무기에 스킬이 있기 때문에, 공격 시와 무기 장착시 두 개를 등록했다.

해제를 통해 사용하지 않는 이벤트는 지워주는게 좋다.

등록을 마치면 신호가 올 때마다 해당 함수를 실행 시켜줄 수 있다.

 

이제 플레이어 클래스에서 공격하는 함수 안에다 Send함수를 추가한다. 이제부터는 공격 마다 옵저버에게 공격 이벤트를 게속적으로 보내준다.

 

이벤트에 걸어두었던 함수가 실행이 된다.

 

70%확률로 적중 효과가 발생되도록 구현한 gif.