1.3 - 스폰된 액터

Level Scripting 예제 레벨에 대한 개요로, 예제 1.3: Spawned actors with event dispatchers, 이벤트 디스패처로 스폰된 액터 입니다.

Windows
MacOS
Linux

levelscripting_1_3.png

이 예제에서는, 플레이어가 박스 트리거로 걸어 들어갈 때 여덟개의 코인 픽업이 스폰되며, 그 각각에는 플레이어가 그 코인을 획득했을 때의 디스패치 함수가 들어 있습니다. 다음 문 세트를 열기 위해서 플레이어는 여덟개의 코인을 모두 모아야 합니다.

레벨 스크립트

클릭하거나 우클릭 - 다른이름으로 저장 후 원래 크기로 볼 수 있습니다.

여기서 코인 블루프린트는 게임플레이 도중 스폰되기 때문에, 버튼 블루프린트와 같은 방식으로 레벨 스크립트에서 참조해 줄 수가 없습니다. 게다가 스크립트는 코인을 언제 다 모았는지도 알아야 하는데, 이벤트가 많아 복잡해 질 수가 있습니다. 그 대신 스폰되는 코인마다 그 디스패치 함수를 하나의 커스텀 이벤트로 바인딩합니다. 이런 식으로 코인 블루프린트를 모았을 때, 디스패치 함수를 호출하여 커스텀 이벤트를 대신 발동시킬 수 있습니다. 스크립트는 그 함수가 발동된 횟수가 스폰된 코인 갯수에 달할 때까지 셉니다.

여러 함수를 하나의 커스텀 이벤트에 바인딩하는 것은 여러가지 전형적 게임플레이 시나리오에 유용한데, 이를테면 적 한 무더기를 스폰한 다음 전부 잡았을 때 뭔가를 발동시키도록 하는 경우가 그렇습니다. 그런 경우라면 스폰되는 적마다 하나의 'OnEndPlay' 이벤트에 바인딩시키고, 적을 잡을 때마다 발동시켜 다 잡았는지 검사하도록 하면 될 것입니다.

BP_Double_Doors 이벤트 그래프

클릭하거나 우클릭 - 다른이름으로 저장 후 원래 크기로 볼 수 있습니다.

BP_Double_Doors 블루프린트 액터에는 약간 복잡한 문에 대한 셋업이 포함되어 있습니다. 여기서는 타임라인 을 어떻게 사용해서 각 문의 위치, 볼트 메커니즘의 회전, 볼트에 적용된 머티리얼 등 여러가지 것들을 돌리고 있는지 확인할 수 있습니다. 이 망은 블루프린트용으로 만들어진 Open DoorsClose Doors 커스텀 이벤트를 받을 때마다 발동됩니다.

동전 셋업

이 예제의 동전은 Blueprints_Advanced 레벨의 예제 2.5 에서도 사용된 것입니다.

부모 셋업

클릭하거나 우클릭 - 다른이름으로 저장 후 원래 크기로 볼 수 있습니다.

부모 블루프린트 BP_Pickup_Parent 에는 기본적인 픽업 작동방식에 대한 스크립트가 들어있습니다. 이를테면 픽업이 떠있는 상태로 회전하는 타임라인 애니메이션이나, 픽업 획득시의 시퀀스 등입니다. 자손 블루프린트는 이 스크립트의 모든 것을 상속하면서, 획득시의 스크립트도 추가로 갖고 있어, 각각의 픽업에 기본적인 특징은 공유하면서 약간씩 다른 동작을 보이도록 할 수 있습니다. 이 부분이 유용한 것은, 부모 블루프린트의 스크립트를 수정하면 그 모든 자손 블루프린트에도 적용되기 때문입니다.

OnPickedUp 이벤트 디스패처 는 플레이어의 폰이 Pickup Trigger SphereComponent 에 겹칠 때 호출됩니다. 각 자손 블루프린트는 OnPickedUp 이벤트에 각기 다른 이벤트를 바인딩하여, 플레이어가 각각의 픽업을 획득하여 OnPickedUp 이 호출되면 각기 다른 문자열이 출력되도록 하고 있습니다.

클릭하거나 우클릭 - 다른이름으로 저장 후 원래 크기로 볼 수 있습니다.

원칙상 블루프린트 그래프에는 같은 이벤트의 중복이 불가능하므로, 부모와 자손 스크립트 양쪽에 ReceiveBeginPlay 이벤트가 들어있다면 부모 스크립트에 있는 이벤트만 발동됩니다. 자손 스크립트에서 발동되게 하려면, 이벤트에 우클릭한 다음 Add call to parent function (부모 함수로의 호출 추가)를 해 주면 됩니다. 그러면 그에 해당하는 이벤트 호출시 부모 스크립트에 있는 이벤트를 발동시키는 함수가 생성됩니다.

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback