본문 바로가기

블루프린팅/4. 블루프린트 통신

이벤트 디스패처

이벤트 디스패처는 이벤트가 발생할 때 블루프린트가 다른 블루프린트에 알릴 수 있게 한다. 레벨 블루프린트및 다른 블루프린트클래스는 이 이벤트를 수신할 수 있으며 이벤트가 트리거 될때 서로 다른 액션을 실행할 것이다.

내 블루프린트 패널에서 이벤트 디스패처를 생성한다. 예를 들어 BP_Platform  블루프린트를 생성해보자. 액터 BP_Platform 블루프린트와 겹칠 때 PlatformPressed라는 이벤트 디스패처를 호출한다. 레벨 블루프린트에서 PlatformPressed 이벤트를 수신하고 있으면 이 이벤트가 트리거 되면 폭발이 발생한다.

 

1. 삼인칭 콘텐츠가 포함된 템플릿을 기반으로 새로 만들거나 기존 프로젝트를 사용한다.

2. 액터를 부모 클래스로 하는 BP_Platform 블루프린트를 생성하고 블루프린트 에디터를 연다.

3. 컴포넌트패널에서 +추가버튼을 누르고 스태틱메시 컴포넌트를 선택하고 디테일패널에서 Shape_Cylinder 스태틱 메시를 선택 스케일 속성의 Z값을 0.1로 변경 콜리전 프리셋을 OverlapAllDynamic으로 변경

4. 블루프린트를 컴파일후 내 블루프린트 패널에서 이벤트 디스패처를 생성후 이름을 PlatformPressed로 변경.

겹쳐질 BP_Platform인스턴스의 레퍼런스를 전달하기 위해 입력 파라미터를 하나 만들고 이름을 BP_Platform이라고 하고 BP Platform 오브젝트 레퍼런스 타입으로 바꾼다.

5 이벤트 그래프를 우클릭하고 ActorBeginOverlap 이벤트를 추가한다. Platform Pressed 이벤트 디스패처를 끌어 이벤트 그래프를 놓는다. 하위 메뉴에서 호출을 선택한다. 이벤트그래프를 우클릭해서 self를 검색한뒤 셀프레퍼런스가져오기 액션을 선택한다. self액션은 현재 인스턴스의 레퍼런스를 반환한다. 다음과 같이 연결한다.

6. 블루프린트를 컴파일한다. 레벨에디터에서 콘텐츠브라우저의 BP_Platform을 끌어 레벨에 놓아 인스턴스를 생성한다.

7. BP_Platform 인스턴스를 선택하고 레벨에디터의 툴바에서 블루프린트버튼을 클릭해 레벨 블루프린트 열기를 선택한다. 다음 스크린샷과 같이 이벤트 그래프를 우클릭하고 Platform Pressed추가를 선택한다.

8.이벤트 그래프를 우클릭후 SpawnActorfromClass를 추가. Class파리미터를 Blueprint Effect Explosion선택. Platform Pressed이벤트의 파란색을 끌어 GetActorTransform추가후 노드들을 다음과 같이 연결

9.레벨블루프린트를 컴파일하고 레벨 에디터의 플레이 버튼을 눌러 레벨을 테스트한다. BP_Platform이 있는 위치로 캐릭터를 이동해서 겹치면 폭발을 생성한다.

10. 정리. 블루프린트클래스에서 오버랩이 감지되면 Platform Pressed 디스패처를 이용 통보를 하고 이걸 레벨에 있는 인스턴스가 PlatformPressed로 받아 같은위치에 Effect_Explosion을 발생시켰다. 오버랩은 클래스에서 통보하고 인스턴스가 효과를 Spawn하는걸 분리시켰다.