다이내믹 바인딩
게임플레이 이벤트 또는 UI 애니메이션 도중 플레이어가 시네마틱 경험이나 UI와 상호작용할 때 플레이어에게 보이는 다양한 오브젝트를 애니메이팅할 수 있습니다. 다이내믹 빙의(Dynamic Possession)는 레벨에서 빙의할 오브젝트나 스폰할 오브젝트를 선택하는 커스텀 블루프린트 로직을 제공합니다. 이 기능은 플레이어 폰 을 동적으로 바인딩하는 등 일반적인 해결 로직을 위한 빠른 바인딩 옵션도 제공합니다. 트랙(Tracks) 및 프로퍼티(Properties) 를 새로 빙의되거나 스폰된 액터에 바인딩할 수 있으며, 원래 바인딩된 오브젝트와 같은 효과를 가집니다.
시퀀서(Sequencer)에서 다이내믹 바인딩(Dynamic Binding)을 사용하여 다음과 같은 작업을 할 수 있습니다.
- 커스텀 블루프린트 로직으로 동적으로 빙의되도록 레벨의 오브젝트를 정의합니다. 이 로직은 레벨 시퀀스 디렉터 블루프린트 내에서 구현됩니다. UMG의 경우, UMG 블루프린트 그래프 내에서 구현됩니다.
- 커스텀 블루프린트 로직에 바인딩되도록 동적으로 스폰된 오브젝트를 정의합니다.
- 플레이어 컨트롤러에 대한 바인딩을 빠르게 정의합니다.
- 새 오브젝트에 동적으로 바인딩할 때 호환되어 같은 트랙과 프로퍼티에 영향을 주는 트랙 과 * 프로퍼티 가 있어야 합니다.
- 언리얼 모션 그래픽 (Unreal Motion Graphics, UMG) 에서 위젯을 정의하여 커스텀 블루프린트 로직을 동적으로 빙의합니다.
즉, 다이내믹 바인딩을 사용하여 포제서블 액터나 스폰된 액터를 오버라이드할 수 있습니다.
다이내믹 바인딩 예시입니다. 매니(Manny) 시퀀스가 오버라이드되고 해당 시퀀스 애니메이션은 '골디(Goldie)'에 바인딩됩니다.
사용 사례
준비한 시네마틱과 맞는 고정 플레이어 캐릭터가 있다고 가정해보겠습니다. 이 캐릭터로 게임플레이와 시네마틱 간에 블렌딩해보겠습니다. 시네마틱을 생성할 때 일반적으로는 스포너블로 생성하지만, 런타임 중에는 플레이어에게 제어권을 돌려주기 위해 캐릭터를 스폰하지 말아야 합니다. 일반적으로 플레이어 폰을 가져오고 바인딩이 제어하게 합니다. 여러 가지 퀘스트가 많고 플레이어의 캐릭터 선택에 따라 임무에 합류할 수 있는 NPC가 많은 RPG 게임을 예로 들 수 있습니다. 편집할 때는 어떤 NPC가 플레이어의 캐릭터에 합류할지 알 수 없습니다. 그래서 시네마틱을 제작하기가 어렵습니다.
전제조건
- 시퀀서 및 그 인터페이스 를 알아야 합니다.
- 트랙 생성 및 사용 방법을 알아야 합니다.
- 포제서블 및 스포너블 을 알아야 합니다.
- 블루프린트 를 알아야 합니다.
다이내믹 바인딩 생성
계층구조 트리(Hierarchy Tree) 에서 액터를 우클릭하면 새 엔드포인트에 또는 플레이어 폰(Player Pawn) 으로 리졸브되는 함수에 또는 기존 다이내믹 바인딩에 동적으로 바인딩하는 옵션을 사용할 수 있습니다. 뒤쪽의 두 개 옵션은 퀵 바인드(Quick Bind) 아래에 있으며, 이벤트 트랙 작동 방식과 비슷합니다.
- 큐브는 동적으로 빙의됩니다.
- 실린더는 빙의되지 않습니다.
다이내믹 바인딩 메뉴 옵션에는 새 엔드포인트 생성 방법 또는 퀵 바인드 를 통해 솔버에 액터를 바인딩하는 방법이 포함됩니다. 다이내믹 빙의(Dynamic Possession) > 엔드포인트(Endpoint) (언바운드) 메뉴에서 새 엔드포인트(New Endpoint) 생성을 선택하거나 퀵 바인드 기능을 사용할 수 있습니다. 액터가 동적으로 바인딩되면 UE는 레벨 시퀀스 디렉터 블루프린트(Level Sequence Director Blueprint) 를 엽니다.
새 엔드포인트 생성하기
어떻게 바인딩할지에 대한 자체 로직을 추가할 수 있는 한 쌍의 커스텀 블루프린트 노드(바인딩 노드 및 Return Node)를 생성합니다. 그런 다음, 포제서블 또는 스포너블을 통해 바인딩되는 반환 오브젝트를 제공할 수 있습니다.
Return Node에는 동적으로 바인딩된 액터를 빙의하거나 스폰할 수 있는 기능과 이를 대체한 다른 에셋이 포함되어 있습니다. 반환 값 오브젝트(Return Value Object)의 파란색 입력 핀을 우클릭하고 구조체 핀 분할(Split Struct Pin)을 선택합니다. 분할하고 나면, 옵션을 통해 반환 값 오브젝트 드롭다운 메뉴에서 어떤 에셋을 반환할지 선택하고 그 에셋이 빙의될지 스폰될지를 선택할 수 있습니다. 기본적으로 반환 값은 빙의된 오브젝트(Return Value Is Possessed Object)의 값이 체크되어 있으므로, 에셋은 빙의 상태입니다. 반환 값은 빙의된 오브젝트의 체크를 해제하면 에셋이 스폰된 오브젝트로 반환됩니다.
퀵 바인드
퀵 바인드 메서드를 사용하여 플레이어 폰으로 리졸브(Resolve to Player Pawn) 를 선택할 수 있습니다. 그러면 할당된 바인딩을 플레이어 폰에 바인딩하는 엔드포인트가 생성되고 동적으로 바인딩된 액터를 호출하는 로직이 레벨 시퀀스 디렉터 블루프린트 에 추가됩니다.
기존 다이내믹 바인딩
기존 다이내믹 바인딩이 있다면, 그 바인딩을 다시 사용하여 다른 액터에 바인딩할 수 있습니다. 액터를 선택한 후, 퀵 바인드 메뉴(시퀀서 > 다이내믹 빙의 > 언바운드(Unbound) > 퀵 바인드 )에서 액터를 우클릭하고 이 시퀀스(This Sequence) > 함수 호출(Call Function) > 나열된 바인딩에서 선택합니다. 바인딩은 바인딩이 생성된 액터의 이름을 따서 명명되며 이름 끝에 'Dynamic Binding'이라는 이름이 추가됩니다. 예를 들어, 일반 큐브에서 다이내믹 바인딩을 만들었다면, 바인딩 이름은 'Cube Dynamic Binding'이 됩니다.
탐색 아이콘(다이내믹 빙의 > 엔드포인트 > 탐색(Browse) )을 사용하여 연관된 블루프린트 엔드포인트로 이동할 수 있습니다.
참고: 시퀀서에서 액터를 삭제해도 이전에 생성된 다이내믹 바인딩 블루프린트는 삭제되지 않습니다. 이전에 다른 에셋과 함께 생성했는데 이제 사용하지 않는 다이내믹 바인딩 블루프린트를 제거하려면, 연관된 시퀀스의 DirectorBP 에서 해당 함수를 삭제해야 합니다. 연관된 함수는 내 블루프린트(My Blueprint) 패널의 함수(Functions) 섹션에 나열됩니다.
액터가 플레이어 폰에 동적으로 바인딩된 경우, 바인딩에 사용할 플레이어 컨트롤러를 선택할 수 있습니다. 다이내믹 빙의 아래에서 플레이어 폰으로 리졸브 엔드포인트를 선택합니다. 다시 바인딩을 보면, 페이로드(Payload) 섹션 아래에 플레이어 컨트롤러 인덱스(Player Controller Index)에서 사용할 플레이어 폰을 선택하는 옵션이 보입니다.
에디터에서 호출
에디터에서 호출(Call In Editor)을 사용하여 다이내믹 바인딩을 디버깅할 수 있습니다. 액터가 동적으로 바인딩되고 나면, 에디터에서 호출 옵션(시퀀서 > 다이내믹 빙의 > 에디터에서 호출 에서 액터 우클릭)을 활성화할 수 있습니다. 이 기능이 활성화되면, 할당된 엔드포인트가 에디터에서 플레이(Play In Editor, PIE) 외부의 에디터에서 트리거됩니다.
경고: 이 엔드포인트를 호출한 결과로 일어난 변경 사항은 현재 레벨이나 에셋에 저장될 수 있습니다.
다이내믹 바인딩 지우기
액터를 우클릭하고 다이내믹 빙의를 선택하고 엔드포인트의 드롭다운 메뉴에서 지우기(Clear) 를 선택하면 다이내믹 바인딩을 제거할 수 있습니다. 이렇게 하면 다이내믹 바인딩은 제거되지만 연관된 블루프린트는 제거되지 않습니다.
다이내믹 바인딩 리바인딩
동적으로 바인딩된 액터를 다른 엔딩에 리바인딩할 수 있습니다. 그 방법은 액터 우클릭 > 다이내믹 빙의 선택 > 엔드포인트의 드롭다운에서 리바인드 대상(Rebind To) 선택 후 사용할 엔드포인트를 선택하면 됩니다.
UMG 및 다이내믹 바인딩
언리얼 모션 그래픽 UI 디자이너 (UMG) 에셋의 다이내믹 엔드포인트를 생성하는 방법은 다른 액터 바인딩 방법과 동일하나 한 가지가 다릅니다. 다른 점은 UMG 에셋으로 다이내믹 바인딩을 생성해도 레벨 시퀀스 디렉터 블루프린트 가 열리지 않습니다. 이 프로세스는 UMG 에셋 내에 함수를 생성하는데, 이미 에셋과 연관된 UI 블루프린트 그래프 가 있기 때문입니다. UMG가 아닌 에셋과는 달리, 다이내믹 바인딩 생성 프로세스는 연관된 블루프린트를 자동으로 열지 않습니다.
다이내믹 바인딩 예시
이 튜토리얼은 액터를 다른 액터에 동적으로 바인딩하는 방법과 에디터에서 호출을 사용하여 뷰포트에서 다이내믹 바인딩이 발생하는 것을 확인하는 방법을 예시로 보여줍니다. 빈 레벨을 새로 생성합니다. 프로젝트에 빠르게 추가 드롭다운 메뉴에서 큐브 및 스피어 를 생성합니다(셰이프(Shapes) > 큐브 및 셰이프(Cube and Shapes) > 스피어(Sphere)). 레벨 시퀀스(Level Sequence) 를 생성한 후 큐브를 추가하기 위해 시퀀서 의 빈 공간을 우클릭하고 액터를 시퀀서로(Actor to Sequencer) 를 선택하고 큐브 를 찾습니다. 아웃라이너(Outliner) 에서 스피어 를 선택하고 액터 태그 를 그 스피어 에 추가합니다. 디테일 패널 에서 액터로 필터링(Filter by Actor) 을 클릭합니다. 태그(Tags) 섹션에서, 플러스 아이콘을 클릭하여 배열 엘리먼트(Array element) 를 추가합니다. 태그 이름을 'sphere'로 입력합니다. 이 액터 태그와 시퀀스 태그를 혼동하면 안 됩니다. 이 프로세스는 나중에 블루프린트 노드가 선택하는 액터 태그를 사용합니다.
큐브로 짧은 애니메이션을 만듭니다. 가령, X 위치에서 30프레임 동안 큐브가 움직이는 애니메이션 등 어떠한 동작이든 나중에 다이내믹 바인딩이 작동하는 것을 관찰할 수 있는 애니메이션이면 됩니다. 큐브에 다이내믹 바인딩을 생성합니다. 시퀀서에서 큐브를 우클릭하고 다이내믹 빙의 를 선택합니다. 거기서 엔드포인트 > 새 엔드포인트 생성(Create New Endpoint) 을 선택합니다. 그러면 두 개의 블루프린트 노드인 Cube Dynamic Binding 및 Return Node 가 있는 레벨 시퀀스 디렉터 블루프린트 가 열립니다. 스피어가 큐브를 대체할 수 있도록, 새로 생성된 블루프린트를 수정하여 선택한 태그('sphere')가 포함된 모든 액터를 가져옵니다. Get All Actors with Tag 노드와 Get (a copy) 노드를 추가합니다. Cube Dynamic Binding 노드 의 실행(Exec) 출력 핀 을 Get All Actors with Tag 노드 의 실행 입력 핀 에 연결합니다. Get All Actors with Tag 노드 의 태그(Tag) 필드 에 'sphere' 를 입력합니다. Get All Actors with Tag 노드 의 액터 출력(Out Actors) 핀 을 Get (a copy) 노드 의 배열 핀 에 연결합니다. 그러면 'sphere' 액터 태그가 있는 모든 액터의 첫 번째 인덱스 (0)을 반환합니다. Get All Actors with Tag 노드 의 실행 핀 을 Return Node 노드 의 실행 핀 에 연결합니다. Return Node 에서 구조체를 분할 해야 합니다. 반환 값(Return Value) 핀 을 우클릭하고 구조체 핀 분할 을 선택합니다. 그러면 반환 값은 빙의된 오브젝트 가 노출되며, 스피어 빙의를 제공합니다. 마지막으로 Get (a copy) 노드 의 출력 핀 을 Return Node 노드 의 반환 값 오브젝트(Return Value Object) 핀 에 연결합니다.
커스터마이징한 블루프린트를 컴파일하고 저장 합니다. 시퀀서 로 돌아가 큐브를 우클릭하고 다이내믹 빙의 로 이동하여 에디터에서 호출 을 활성화합니다. 시퀀서에서 재생 헤드를 스크러빙하여 큐브가 스피어로 대체되었고 애니메이션이 제대로 적용되었는지 확인합니다.
