본문 바로가기

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

[언리얼][블루프린트] 직접 블루프린트 통신

직접 블루프린트 통신은 블루프린트/액터 사이의 간단한 통신 방법이다. 다른 액터/블루프린트에 대한 참조를 저장하는 오브젝트 레퍼런스 변수를 만드는 데 사용된다. 그런 다음 오브젝트 레퍼런스 변수를 액션의 타깃 입력 파라미터로 사용해 액션을 호출할 수 있다.

플레이어가 지나가면 포인트라이트의 사시성을 토글하는 BP_LightSwitch 블루프린트를 생성해 보자.

 

1. 프로젝트를 하나 생성하거나 연다.

2. 콘텐츠드러워를 열어 +추가를 누르고 블루프린트 클래스>액터부모클래스> 이름을 BP_LightSwitch 로 한고 더블클릭해서 블루프린트 에디터를 연다.

3. 컴포넌트 패널에서 스태틱 메시 컴포넌트를 추가하고 디테일에서 SM_CornerFrame 스태틱메시를 선택한다. 조명스위치를 시각적으로 표현한다. 

4. 또 플레이어의 이동을 차단하지 않도록  콜리전 프리셋을OverlapAllDynamic으로 변경한다.

5. 내 블루프린트 패널에서  Light라는 새 변수를 생성한다.

6. 디테일 패널에서 변수타입을 포인트라이트를 표시후 오브젝트레퍼런스를 선택한다. 인스턴스 편집가능 속성을 체크한다.

이벤트그래프 탭을 눌러

Light 변수를 끌어다 놓는다. GetLight옵션을 선택하고 파란색 핀을 끌어 컨텍스트메뉴에서 toggle을 검색해서 Toggle Visibility(PointLightComponet)라는 함수를 선택한다.

이벤트 그래프를 우클릭하고 ActorBeginOverlap 이벤트를 추가한다. Light 노드의 파란색 핀을 끌어 컨텍스트메뉴에서 ?isValid매크로를 추가한다. 다음과 같이 노드들을 연결한다.

오브젝트 레퍼런스 변수들은 여러가지 이유로 유효하지 않을수 있게 때문에 유효성 검사를 하는것이 좋다.

레벨에디터의 툴바에 있는 생성버튼을 클릭한다. 라이트 위로 마우스를 가져가 하위메뉴가 나오면 포인트라이트를 끌어 레벨 어딘가에 놓으면 인스턴스가 생성된다. 컴파일 한후 레벨에디터로 돌아온다.

툴바 +를 눌러 Point Light를 생성한다.

디테일패널에서 인스턴스를 클릭해 이름을 Lamp로 바꾼다.

런타임에 조명 속성을 변경할 수 있더록 모빌리티 속성을 무버블로 변경한다.

콘텐츠브라우저에서 BP_LightSwitch 블루프린트 클래스를 끌어다 레벨에 추가한 포인트라이트 인스턴스 근처에 놓는다. 인스턴스 편집기능을 체크했기 때문에 Light변수가 디테일 패널에 나타난다. Light변수의 드롭다운 메뉴를 클릭해서 레벨에 있는 모든 포인트 라이트 인스턴스를 표시하고, 이전 단계에서 Lamp로 이름을 변경한 포인트라이트 인스턴스를 선택한다.

이것이 블루투스 통신이다. BP_LightSwitch에는 다른 액터/블루프린트에 대한 오브젝트 레퍼런스가 있으며 이들의 액션을 호출할 수 있다.

 

레벨블루프린트 플레이 버튼을 눌러  캐릭터가 BP_LightSwitch를 겹칠때마다 포인트라이트의 가시성이 토글된다.