만약에 디스패처와 인터페이스가 없다면??
캐릭터에 물체에 부딪힐때 뭔가 이벤트를 발동하고
싶다고 하자. 하나의 오브젝트면 상관이 없지만
그 부딪힌 객체가 뭔지 몰라 객체 수 만큼
캐스팅해야한다.
만약 캐스팅해서 그 형태가 아니라면.. 또 예외처리하고 다음 캐스팅을 하고..해야한다.
그런 어려움을 막기위해 인터페이스와 이벤트 디스패쳐를 사용한다면
각자의 작업, 일괄 작업을 편하게 할 수 있다.
이벤트 인터페이스 예시
![](https://blog.kakaocdn.net/dn/bsrza2/btrksMC7sGg/WRbZf8X9CroJKlbq131TB0/img.png)
이렇게 인터페이스 블루프린트를 만들었다.
캐릭터가 닿으면 인터렉트라는 인터페이스를
작동하게 한다.
![](https://blog.kakaocdn.net/dn/mHKDN/btrkyO7o8IB/API9Kas9hwaUHgPuWM49eK/img.png)
그 다음으로 인터페이스를 구현할 객체(라이트 객체)에 인터페이스를 물려준다.
(해당 객체 블루프린트 클래스 세팅 누르면
설정할 수 있음)
![](https://blog.kakaocdn.net/dn/5haQB/btrkAOFzPQQ/hOb5gwGvepCJkZEKCZSOk0/img.png)
![](https://blog.kakaocdn.net/dn/sIj1N/btrkAu1GRfi/Nbez97uR8bVQ8dJGt0t0Wk/img.png)
윗 그림은 라이트에서 불끄고 키는거 함수로 구현해서 인터페이스 이벤트에 물려주엇다.
다른 객체도 이와같이 Interact라는 인터페이스 이벤트에 각각의 활동을 물려주면
한 인터페이스 이벤트에 각각의 함수를 발동 할 수 있다.
한 객체의 함수를 호출한다.
이벤트 디스패처는 이벤트를 달아놓고 일괄적으로 작동하게 할 수 있다.
이벤트 디스패처 예시
![](https://blog.kakaocdn.net/dn/eaOhiQ/btrkxNN5YL6/P0VgMRGKNKtgvsaxxGHF91/img.png)
여기 테이블이라는 BP_Table 객체가 있다.
![](https://blog.kakaocdn.net/dn/NFRTm/btrkz4oC968/S7h5jzfKtxU2w1jCDa1E1K/img.png)
이 객체는 블루프린트 왼쪽 하단에
이벤트 디스패처를 만들어서 테이블 콜리젼에 닿으면 ED EventDispather라는 디스패쳐가
작동하도록 설정했다.
![](https://blog.kakaocdn.net/dn/HVixT/btrkAWQ3d5w/11DTFU3EphW3HSK9YYXEhK/img.png)
문이다. 우리는 이것을 Door라고 하기로 했다.
![](https://blog.kakaocdn.net/dn/bFKI9R/btrkwmpF4xh/4vnjVIld6lfM3jnuPfa4kk/img.png)
테이블에 등록했던 Dispatcher에 문이 열리는 이벤트를 등록했다. 이벤트 바인딩이라고 한다.
이 이벤트 바인딩으로 하나의 디스패쳐가 작동하면 디스패쳐에 바인딩한 여러 활동을 일괄적으로
작동하도록 할수 있다.
![](https://blog.kakaocdn.net/dn/JREtt/btrkxPE9FF7/5oLKNXdkemR2OdmxMQzwzK/img.gif)
정리하자면 인터페이스는 인터페이스 이벤트로 함수를 실행하는 것이고
이벤트 디스패쳐는 디스패쳐에 이벤트들 할당(바인딩)을 해 일괄적으로 이벤트를 실행하는 것이다.
언뜻보면 둘이 같은 용도 아니야? 라고 생각할 수 있지만..
둘은 엄연히 다르고 인터페이스 이벤트를 디스패쳐에 할당해서 사용하곤 한다.
인터페이스는 실체만 갖고 순수 가상의 형태이다. 구조를 잡기위해 쓰곤한다.
즉, 인터페이스를 활용하면 각각의 활동을 할 수 있다.
예를 들어 캐릭터에 닿으면 인터페이스 이벤트가 작동하게 한다고 하자.
그러면 그 인터페이스 이벤트를 갖고 있는 클래스는
아이템이라고 치면 그만의 활동(함수)을 할 것이고
적이라고 하면 그 적의 활동(함수)를 발동시킬수 있다. -> 다양한 객체를 캐스팅 할 필요가 없음
이벤트 디스패처는 이벤트를 할당해놓고 일괄적으로 작동하게 할 수 있다.
예를 들어 문에 플레이어가 닿았다면,
여러 물체들 마다 일괄적으로 동작하게 한다. -> 커스텀 이벤트, 인터페이스 이벤트까지
받는 쪽이 불특정 다수이며 그냥 호출만으로 반응시키고 싶을 때는 받는 쪽에서 이를 이벤트로 구현하는 방식이다.
할당하는 것도 자유자재이다. 언바인딩으로 디스패쳐에서 제외시킬수도있다.
'STUDY > Unreal Engine' 카테고리의 다른 글
Unreal Engine 5 - 비헤이비어 트리(Behavior Tree)를 사용한 AI 캐릭터 랜덤 이동 및 타겟 이동 (Move to Tar (0) | 2021.11.18 |
---|---|
Unreal Engine 5 - 애니메이션 리타겟팅, 애니메이션 재사용 (Animation Retargeting) (0) | 2021.11.18 |
Unreal Engine - 언리얼 엔진의 기본 용어 (액터, 폰 캐릭터 등등) (0) | 2021.11.09 |
Unreal Engine - 언리얼 엔진 4개의 에셋 참조(Referencing Assets)에 대해서 (0) | 2021.11.08 |
언리얼 프로젝트 생성 시도 중 오류가 발생했습니다. (0) | 2021.11.08 |