11
11

만약에 디스패처와 인터페이스가 없다면??
캐릭터에 물체에 부딪힐때 뭔가 이벤트를 발동하고
싶다고 하자. 하나의 오브젝트면 상관이 없지만
그 부딪힌 객체가 뭔지 몰라 객체 수 만큼
캐스팅해야한다.

만약 캐스팅해서 그 형태가 아니라면.. 또 예외처리하고 다음 캐스팅을 하고..해야한다.

그런 어려움을 막기위해 인터페이스와 이벤트 디스패쳐를 사용한다면
각자의 작업, 일괄 작업을 편하게 할 수 있다.

이벤트 인터페이스 예시

이렇게 인터페이스 블루프린트를 만들었다.
캐릭터가 닿으면 인터렉트라는 인터페이스를
작동하게 한다.

그 다음으로 인터페이스를 구현할 객체(라이트 객체)에 인터페이스를 물려준다.
(해당 객체 블루프린트 클래스 세팅 누르면
설정할 수 있음)

윗 그림은 라이트에서 불끄고 키는거 함수로 구현해서 인터페이스 이벤트에 물려주엇다.
다른 객체도 이와같이 Interact라는 인터페이스 이벤트에 각각의 활동을 물려주면
한 인터페이스 이벤트에 각각의 함수를 발동 할 수 있다.
한 객체의 함수를 호출한다.

이벤트 디스패처는 이벤트를 달아놓고 일괄적으로 작동하게 할 수 있다.

이벤트 디스패처 예시

여기 테이블이라는 BP_Table 객체가 있다.


이 객체는 블루프린트 왼쪽 하단에
이벤트 디스패처를 만들어서 테이블 콜리젼에 닿으면 ED EventDispather라는 디스패쳐가
작동하도록 설정했다.

문이다. 우리는 이것을 Door라고 하기로 했다.


테이블에 등록했던 Dispatcher에 문이 열리는 이벤트를 등록했다. 이벤트 바인딩이라고 한다.
이 이벤트 바인딩으로 하나의 디스패쳐가 작동하면 디스패쳐에 바인딩한 여러 활동을 일괄적으로
작동하도록 할수 있다.

정리하자면 인터페이스는 인터페이스 이벤트로 함수를 실행하는 것이고
이벤트 디스패쳐는 디스패쳐에 이벤트들 할당(바인딩)을 해 일괄적으로 이벤트를 실행하는 것이다.

언뜻보면 둘이 같은 용도 아니야? 라고 생각할 수 있지만..
둘은 엄연히 다르고 인터페이스 이벤트를 디스패쳐에 할당해서 사용하곤 한다.

인터페이스는 실체만 갖고 순수 가상의 형태이다. 구조를 잡기위해 쓰곤한다.

즉, 인터페이스를 활용하면 각각의 활동을 할 수 있다.
예를 들어 캐릭터에 닿으면 인터페이스 이벤트가 작동하게 한다고 하자.
그러면 그 인터페이스 이벤트를 갖고 있는 클래스는
아이템이라고 치면 그만의 활동(함수)을 할 것이고
적이라고 하면 그 적의 활동(함수)를 발동시킬수 있다. -> 다양한 객체를 캐스팅 할 필요가 없음

이벤트 디스패처는 이벤트를 할당해놓고 일괄적으로 작동하게 할 수 있다.
예를 들어 문에 플레이어가 닿았다면,
여러 물체들 마다 일괄적으로 동작하게 한다. -> 커스텀 이벤트, 인터페이스 이벤트까지
받는 쪽이 불특정 다수이며 그냥 호출만으로 반응시키고 싶을 때는 받는 쪽에서 이를 이벤트로 구현하는 방식이다.
할당하는 것도 자유자재이다. 언바인딩으로 디스패쳐에서 제외시킬수도있다.

COMMENT