버추얼 카메라(Virtual Camera, VCam) 컴포넌트는 UMG 위젯을 사용하여 시네 카메라 컴포넌트를 편집할 수 있는 모듈형 시스템을 제공합니다. VCam 컴포넌트는 언리얼 엔진에서 VCam 액터 같은 커스텀 버추얼 카메라를 빌드하기 위한 베이스 컴포넌트입니다. 고유한 VCam을 빌드하면 좋은 점은 블루프린트에서 모디파이어(Modifiers)와 출력 제공자(Output Providers)를 사용하여 커스텀 함수 기능을 구현할 수 있다는 것입니다.
버추얼 카메라 아키텍처
VCam 컴포넌트는 아키텍처에 모델, 뷰, 컨트롤러의 세 가지 측면을 구현합니다.
- 모디파이어 는 모델을 나타냅니다. 모디파이어는 시네 카메라 컴포넌트에서 프로퍼티를 변경하는 로직을 구현합니다. 모디파이어는 연결 포인트(Connection Points)를 포함하며, UMG 위젯에서 호출할 수 있는 입력 액션(향상된 입력)을 필요에 따라 노출할 수 있습니다.
- 출력 제공자 는 뷰입니다. 출력 제공자는 위젯을 생성하고 렌더링합니다(스트리밍 가능). 일반적으로 출력 제공자는 UVCamWidgets을 생성하는데, 이는 모디파이어의 연결 포인트(Connection Points)를 연결할 수 있는 특수 위젯입니다. 위젯은 모디파이어와 두 가지 방식으로 상호작용합니다.
- 단순(Simple) - 모디파이어가 등록되어 있고 연결을 통해 노출하는 입력 액션을 트리거합니다.
- 고급(Advanced) - 모디파이어가 특정 커스텀 정의 인터페이스를 구현하는지 여부를 쿼리합니다.
- UVCameraSubSystems 는 UVCamComponent가 활성화되어 있는 한 존재합니다. 이는 LocalPlayerSubSystem과 비슷합니다.
- 이러한 시스템 중 주목할 만한 시스템 중 하나는 InputVCamSubsystem으로, 이 시스템을 사용하면 출시된 게임에서 플레이어 컨트롤러가 하는 방식과 유사하게 UVCamComponents가 입력 디바이스에 바인딩할 수 있습니다.
요구 사항 및 전제조건
이 가이드를 진행하려면 먼저 다음과 조건을 충족해야 합니다.
- 라이브 링크를 사용하여 버추얼 카메라 액터 제어하기의 '필수 구성' 섹션을 따라야 합니다.
- 프로젝트에 모든 필수 플러그인이 활성화되어 있어야 합니다.
- [선택 사항] 지원되는 iOS 디바이스를 사용해야 합니다.
- [선택 사항] iOS App Store에서 라이브 링크 VCam 앱을 다운로드하여 설치해야 합니다.
- [선택 사항] 언리얼 엔진 프로젝트와 라이브 링크 VCam 앱을 실행하는 iOS 디바이스가 공유 네트워크에 연결되어 있어야 합니다.
일부 출력 제공자의 경우 iOS 디바이스를 사용해야 합니다. 이러한 출력 제공자 사용에 대한 자세한 내용은 이 페이지의 VCam 출력 제공자 섹션을 참조하세요.
커스텀 버추얼 카메라 워크플로 구성하기
버추얼 카메라는 두 가지 컴포넌트, 즉 시네 카메라(Cine Camera) 와 VCam 으로 구성됩니다. 이러한 두 컴포넌트는 작동하는 커스텀 버추얼 카메라를 빌드하기 위한 시작 기반입니다.
커스텀 버추얼 카메라를 빌드하는 방법은 다음과 같습니다.
- 레벨 에디터(Level Editor)의 액터 배치(Place Actors) 패널을 사용하여 씬에 시네 카메라(Cine Camera) 를 추가합니다.
- 추가한 시네 카메라를 선택한 상태로 디테일(Details) 패널에서 + 추가(Add) 컴포넌트 메뉴를 클릭하고 목록에서 VCam 컴포넌트를 선택합니다.
- 시네 카메라의 자손이 되도록 VCam 컴포넌트를 클릭하여 CameraComponent 로 드래그합니다.
컴포넌트 계층구조가 아래 예시와 같은 모습일 것입니다.
VCam 컴포넌트에는 다음과 같은 프로퍼티가 있습니다.
| 프로퍼티 |
설명 |
| 활성화됨(Enabled) |
VCam 컴포넌트 전체를 활성화하거나 비활성화하는 토글입니다. |
| 롤(Role) |
버추얼 프로덕션 환경에서 이 버추얼 카메라에 할당할 역할의 타입을 지정합니다. |
| 라이브 링크 서브젝트(Live Link Subject) |
라이브 링크(Live Link) 플러그인을 통해 사용되는 서브젝트입니다. 컴포넌트는 서브젝트의 카메라 정보를 사용하여 라이브 링크가 연결된 디바이스의 씬에서 카메라를 구동합니다. |
| 뷰포트 로커(Viewport Locker) |
버추얼 카메라의 시점에서 렌더링되는 뷰포트입니다. |
| 시퀀서에 의해 스폰 시 컴포넌트 비활성화(Disable Component when Spawned by Sequencer) |
시퀀서에 의해 스폰될 때 VCam 컴포넌트를 비활성화합니다. 이를 통해, 스포너블로 설정된 VCam 컴포넌트가 포함되어 있는 시퀀스를 재생할 때 두 개의 VCam 컴포넌트가 동시에 활성화되는 상황을 방지할 수 있습니다. |
| 입력 프로파일(Input Profile) |
버추얼 카메라의 입력을 매핑하는 데 사용할 프로파일을 지정합니다. 입력 프로파일에 대한 자세한 내용은 버추얼 카메라 컨트롤에 대한 입력 제어하기를 참조하세요. |
| 입력 디바이스 세팅(Input Device Settings) |
입력 디바이스로 사용할 수 있는 디바이스(키보드, 게임패드 및 마우스)를 활성화하거나 비활성화합니다. 입력에 대한 로깅 타입도 선택할 수 있습니다. |
| 출력 제공자(Output Providers) |
모든 출력 디바이스 대상 목록이 포함되어 있습니다. 자세한 내용은 이 페이지의 출력 제공자 섹션을 참조하세요. |
| 모디파이어 컨텍스트(Modifier Context) |
선택적 오브젝트로, 모든 모디파이어가 공유하는 임의의 데이터가 포함되어 있습니다. |
| 모디파이어 스택(Modifier Stack) |
컴포넌트에 추가된 모든 모디파이어 목록이 포함되어 있습니다. 자세한 내용은 이 페이지의 모디파이어 섹션을 참조하세요. |
| 고급(Advanced) 세팅 |
|
| 멀티 유저 리시버에서 출력 비활성화(Disable Output on Multi User Receiver) |
버추얼 카메라가 멀티 유저 세션에 있고 해당 세션의 리시버인 경우 출력을 비활성화합니다. |
| 업데이트 빈도(Update Frequency) |
멀티 유저 모드에서 카메라 업데이트를 전송하는 빈도를 나타냅니다. 최소값은 11밀리초입니다. 30밀리초 미만의 값은 지정하지 않는 것이 좋습니다. 주사율이 더 높아야 하는 경우에는 대신 라이브 링크 리브로드캐스트(Live Link Rebroadcast)를 사용하여 카메라 데이터를 스트리밍하는 것이 좋습니다. |
VCam 모디파이어
버추얼 카메라 모디파이어 는 특수 블루프린트 에셋입니다. 이 모디파이어는 커스텀 함수 기능을 빌드하기 위한 로직과 입력 액션(Input Actions) 을 포함합니다. VCam 모디파이어를 사용하여 블루프린트 또는 C++에서 카메라를 흔들거나 초점을 조정하거나 축을 따라 카메라 이동을 제한하는 등의 고유 이펙트와 행동을 생성할 수 있습니다.
버추얼 카메라에는 모디파이어를 얼마든지 적용하여 다양한 행동과 이펙트를 적용하는 모디파이어 스택을 생성할 수 있습니다. 스택의 각 모디파이어는 위에서부터 아래로 순서대로 적용되고 렌더링됩니다.
언리얼 엔진에는 표준 VCam 액터와 함께 사용되는 디폴트 모디파이어 세트가 포함되어 있습니다. 이러한 각 모디파이어와 해당 로직은 엔진(Engine) > 플러그인(Plugins) > 버추얼 카메라 콘텐츠(VirtualCamera Content) > 모디파이어(Modifiers) 폴더에서 확인할 수 있습니다.
VCam 출력 제공자
버추얼 카메라 출력 제공자 시스템은 버추얼 카메라의 출력을 원격 세션 프로토콜을 사용하는 디바이스와 뷰포트 등의 다양한 제공자에 경유시킬 수 있습니다.
다음과 같은 출력 제공자를 선택할 수 있습니다.
버추얼 카메라에 출력 제공자를 추가하는 방법은 다음과 같습니다.
- 버추얼 카메라의 VCam 컴포넌트를 선택합니다.
- 디테일(Details) 패널의 출력 제공자(Output Providers) 섹션에서 추가(+) 아이콘을 클릭하여 스택에 새 출력 제공자를 추가합니다.
-
추가된 인덱스 0 엘리먼트 옆의 드롭다운을 사용하여 목록에서 출력 제공자 중 하나를 선택합니다.
스택의 각 출력 제공자는 위에서부터 아래로 순서대로 적용되고 렌더링됩니다.
뷰포트 출력 제공자
뷰포트(Viewport) 출력 제공자는 씬에서 버추얼 카메라의 뷰를 가져와 레벨 에디터의 뷰에 직접 출력합니다.
뷰포트 출력 제공자에는 다음과 같은 프로퍼티가 포함되어 있습니다.
| 프로퍼티 |
설명 |
| 활성 여부(Is Active) |
활성화하면 이 출력 제공자를 프레임마다 실행합니다. |
| 타깃 뷰포트(Target Viewport) |
이 버추얼 카메라에 사용할 뷰포트를 선택합니다. |
| UMG 오버레이(UMG Overlay) |
이 출력 제공자가 렌더링할 UMG 클래스입니다. |
| 해상도 오버라이드 사용(Use Override Resolution) |
디폴트 출력 해상도를 커스텀 값으로 오버라이드합니다.
오버라이드된 값을 적용하려면 활성 여부 를 껐다가 다시 켜야 합니다.
|
| 해상도 오버라이드(Override Resolution) |
해상도 오버라이드 사용 이 설정된 경우 커스텀 해상도를 적용합니다. |
| 게임플레이 뷰 타깃 정책(Gameplay View Target Policy) |
에디터에서 플레이(Play-in-Editor, PIE) 또는 출시된 게임과 같은 게임 월드에서, 뷰 타깃을 소유 시네 카메라 액터(Cine Camera Actor)로 설정해야 하는 플레이어 컨트롤러를 결정합니다.
여러 출력 제공자에 한 정책이 설정되어 있을 수도 있으며, 여러 정책에서 같은 플레이어 컨트롤러를 선택해 뷰 타깃을 설정했을 수도 있습니다. 플레이어 컨트롤러에 이미 시네 카메라 액터가 뷰 타깃으로 설정되어 있는지 확인하고 설정되어 있다면 해당 정책을 사용하지 않음으로써 이러한 상충을 해결할 수 있습니다. 즉, 필요에 따라 VCam 컴포넌트에서 출력 제공자 배열을 정렬할 수 있으며, 첫 번째 정책이 우선순위가 가장 높은 정책이 됩니다.
|
픽셀 스트리밍 출력 제공자
픽셀 스트리밍(Pixel Streaming) 출력 제공자는 WebRTC를 사용하여 연결된 원격 디바이스에 에디터 뷰포트를 출력하며, 여기에는 iOS 디바이스에서 사용하는 라이브 링크 VCam 앱이 포함됩니다. 이 메서드는 웹 브라우저를 포함하여 스트리밍 데이터를 수신할 수 있는 모든 호환 디바이스에서 작동합니다. 픽셀 스트리밍 출력 제공자는 버추얼 카메라의 프라이머리 출력 제공자입니다.
픽셀 스트리밍은 픽셀 스트리밍 출력 제공자의 인스턴스에서 구성되며 추가 구성이 필요 없습니다. VCam 컴포넌트는 단일 스트림만 지원합니다.
픽셀 스트리밍 출력 제공자에는 다음과 같은 프로퍼티가 포함되어 있습니다.
| 프로퍼티 |
설명 |
| 활성 여부(Is Active) |
활성화하면 이 출력 제공자를 프레임마다 실행합니다. |
| 타깃 뷰포트(Target Viewport) |
이 버추얼 카메라에 사용할 뷰포트를 선택합니다. |
| UMG 오버레이(UMG Overlay) |
이 출력 제공자가 렌더링할 UMG 클래스입니다. |
| 해상도 오버라이드 사용(Use Override Resolution) |
디폴트 출력 해상도를 커스텀 값으로 오버라이드합니다.
오버라이드된 값을 적용하려면 활성 여부 를 껐다가 다시 켜야 합니다.
|
| 해상도 오버라이드(Override Resolution) |
해상도 오버라이드 사용 이 설정된 경우 커스텀 해상도를 적용합니다. |
| 컴포셔 출력 제공자 인덱스에서(From Composure Output Provider Index) |
컴포셔 출력 제공자의 출력을 사용하는 경우, 여기에 지정합니다. |
| 원격 해상도 일치(Match Remote Resolution) |
활성화하면 스트리밍된 언리얼 엔진 뷰포트를 원격 디바이스의 해상도에 일치시킵니다. |
| ARKit 트래킹 활성화(Enable ARKit Tracking) |
iOS 디바이스의 라이브 링크 VCam 앱에서 수신한 트랜스폼 데이터로 해당 시네 카메라 액터를 제어합니다. |
| 에디터 유휴 상태 방지(Prevent Editor Idle) |
에디터가 포그라운드 애플리케이션이 아닐 때 백그라운드로 이동하는 것을 방지합니다. 이런 경우 에디터가 최소화되어 있거나 다른 애플리케이션을 사용 중일 때 에디터가 응답하지 않거나 느려질 수 있습니다. |
| 라이브 링크 서브젝트 자동 설정(Auto Set Live Link Subject) |
활성화하면, 소유 VCam 컴포넌트의 라이브 링크 서브젝트가 이 출력 제공자가 생성한 서브젝트로 설정됩니다. 해당 출력 제공자도 활성화되어 있어야 합니다. |
| 스트리머 ID(Streamer Id) |
시그널링 서버에 보고할 이 스트림의 이름을 설정합니다. 지정하지 않으면 디폴트 값이 사용됩니다. 스트리머 ID가 다른 VCam 스트리머 ID와 같으면 문제가 발생할 수 있으므로, 스트림마다 고유한 이름을 지정하는 것이 좋습니다. |
| 게임플레이 뷰 타깃 정책(Gameplay View Target Policy) |
에디터에서 플레이(Play-in-Editor, PIE) 또는 출시된 게임과 같은 게임 월드에서, 뷰 타깃을 소유 시네 카메라 액터(Cine Camera Actor)로 설정해야 하는 플레이어 컨트롤러를 결정합니다.
여러 출력 제공자에 한 정책이 설정되어 있을 수도 있으며, 여러 정책에서 같은 플레이어 컨트롤러를 선택해 뷰 타깃을 설정했을 수도 있습니다. 플레이어 컨트롤러에 이미 시네 카메라 액터가 뷰 타깃으로 설정되어 있는지 확인하고 설정되어 있다면 해당 정책을 사용하지 않음으로써 이러한 상충을 해결할 수 있습니다. 즉, 필요에 따라 VCam 컴포넌트에서 출력 제공자 배열을 정렬할 수 있으며, 첫 번째 정책이 우선순위가 가장 높은 정책이 됩니다.
|
언리얼 원격 출력 제공자
언리얼 원격(Unreal Remote) 출력 제공자는 iOS 디바이스의 라이브 링크 VCam 앱처럼 원격 세션 프로토콜(Remote Session Protocol) 을 사용하여 연결된 원격 디바이스에 프라이머리 뷰포트를 출력합니다.
언리얼 원격에서 원격 세션을 사용하여 외부 디바이스에 연결하려면 프로젝트에 추가 환경설정이 필요합니다. 자세한 내용은 이 페이지의 언리얼 원격 출력 제공자 구성하기 섹션을 참조하세요.
언리얼 원격 출력 제공자에는 다음과 같은 프로퍼티가 포함되어 있습니다.
| 프로퍼티 |
설명 |
| 활성 여부(Is Active) |
활성화하면 이 출력 제공자를 프레임마다 실행합니다. |
| 타깃 뷰포트(Target Viewport) |
이 버추얼 카메라에 사용할 뷰포트를 선택합니다. |
| UMG 오버레이(UMG Overlay) |
이 출력 제공자가 렌더링할 UMG 클래스를 선택합니다. |
| 해상도 오버라이드 사용(Use Override Resolution) |
디폴트 출력 해상도를 커스텀 값으로 오버라이드합니다.
오버라이드된 값을 적용하려면 활성 여부 를 껐다가 다시 켜야 합니다.
|
| 해상도 오버라이드(Override Resolution) |
해상도 오버라이드 사용 이 설정된 경우 커스텀 해상도를 적용합니다. |
| 게임플레이 뷰 타깃 정책(Gameplay View Target Policy) |
에디터에서 플레이(Play-in-Editor, PIE) 또는 출시된 게임과 같은 게임 월드에서, 뷰 타깃을 소유 시네 카메라 액터(Cine Camera Actor)로 설정해야 하는 플레이어 컨트롤러를 결정합니다.
여러 출력 제공자에 한 정책이 설정되어 있을 수도 있으며, 여러 정책에서 같은 플레이어 컨트롤러를 선택해 뷰 타깃을 설정했을 수도 있습니다. 플레이어 컨트롤러에 이미 시네 카메라 액터가 뷰 타깃으로 설정되어 있는지 확인하고 설정되어 있다면 해당 정책을 사용하지 않음으로써 이러한 상충을 해결할 수 있습니다. 즉, 필요에 따라 VCam 컴포넌트에서 출력 제공자 배열을 정렬할 수 있으며, 첫 번째 정책이 우선순위가 가장 높은 정책이 됩니다.
|
| 포트 번호(Port Number) |
네트워크 포트 번호입니다. 여러 원격 세션 디바이스를 같은 PC에 연결할 경우에만 변경해야 합니다. |
| 컴포셔 출력 제공자 인덱스에서(From Composure Output Provider Index) |
컴포셔 출력 제공자의 출력을 사용하는 경우, 여기에 지정합니다. |
미디어 출력 제공자
미디어(Media) 출력 제공자는 Blackmagic 및 AJA의 비디오 캡처 카드처럼 언리얼 미디어 프레임워크(Unreal Media Framework)에서 지원하는 디바이스에 버추얼 카메라 출력을 전송합니다.
출력 환경설정(Output Config) 에셋을 사용하여 출력되는 미디어 소스의 타입 및 소스에 출력하는 데 필요한 파라미터를 지정합니다. 이러한 타입의 에셋과 사용 방법, 지원되는 소스에 대한 자세한 내용은 미디어 프레임워크를 참조하세요.
미디어 출력 제공자에는 다음과 같은 프로퍼티가 포함되어 있습니다.
| 프로퍼티 |
설명 |
| 활성 여부(Is Active) |
활성화하면 이 출력 제공자를 프레임마다 실행합니다. |
| 타깃 뷰포트(Target Viewport) |
이 버추얼 카메라에 사용할 뷰포트를 선택합니다. |
| UMG 오버레이(UMG Overlay) |
이 출력 제공자가 렌더링할 UMG 클래스입니다. |
| 해상도 오버라이드 사용(Use Override Resolution) |
디폴트 출력 해상도를 커스텀 값으로 오버라이드합니다.
오버라이드된 값을 적용하려면 활성 여부 를 껐다가 다시 켜야 합니다.
|
| 해상도 오버라이드(Override Resolution) |
해상도 오버라이드 사용 이 설정된 경우 커스텀 해상도를 적용합니다. |
| 게임플레이 뷰 타깃 정책(Gameplay View Target Policy) |
에디터에서 플레이(Play-in-Editor, PIE) 또는 출시된 게임과 같은 게임 월드에서, 뷰 타깃을 소유 시네 카메라 액터(Cine Camera Actor)로 설정해야 하는 플레이어 컨트롤러를 결정합니다.
여러 출력 제공자에 한 정책이 설정되어 있을 수도 있으며, 여러 정책에서 같은 플레이어 컨트롤러를 선택해 뷰 타깃을 설정했을 수도 있습니다. 플레이어 컨트롤러에 이미 시네 카메라 액터가 뷰 타깃으로 설정되어 있는지 확인하고 설정되어 있다면 해당 정책을 사용하지 않음으로써 이러한 상충을 해결할 수 있습니다. 즉, 필요에 따라 VCam 컴포넌트에서 출력 제공자 배열을 정렬할 수 있으며, 첫 번째 정책이 우선순위가 가장 높은 정책이 됩니다.
|
| 출력 환경설정(Output Config) |
미디어 프레임워크에서 지원하는 출력 소스 중 하나를 사용하여 미디어 출력 환경설정 에셋을 할당합니다. |
| 컴포셔 출력 제공자 인덱스에서(From Composure Output Provider Index) |
컴포셔 출력 제공자의 출력을 사용하는 경우, 여기에 지정합니다. |
컴포셔 출력 제공자
컴포셔(Composure) 출력 제공자는 렌더 타깃에 버추얼 카메라의 출력을 전송합니다. 컴포셔와 함께 렌더 타깃을 사용하여 컴포짓할 수 있습니다. 레이어 타깃(Layer Targets) 프로퍼티를 사용하여 컴포짓에 사용할 엘리먼트 스택을 지정할 수 있습니다. 이러한 엘리먼트는 UMG 위젯 렌더링을 지원합니다.
컴포셔 출력 제공자에는 다음과 같은 프로퍼티가 포함되어 있습니다.
| 프로퍼티 |
설명 |
| 활성 여부(Is Active) |
활성화하면 이 출력 제공자를 프레임마다 실행합니다. |
| 타깃 뷰포트(Target Viewport) |
이 버추얼 카메라에 사용할 뷰포트를 선택합니다. |
| UMG 오버레이(UMG Overlay) |
이 출력 제공자가 렌더링할 UMG 클래스입니다. |
| 해상도 오버라이드 사용(Use Override Resolution) |
디폴트 출력 해상도를 커스텀 값으로 오버라이드합니다.
오버라이드된 값을 적용하려면 활성 여부 를 껐다가 다시 켜야 합니다.
|
| 해상도 오버라이드(Override Resolution) |
해상도 오버라이드 사용 이 설정된 경우 커스텀 해상도를 적용합니다. |
| 게임플레이 뷰 타깃 정책(Gameplay View Target Policy) |
에디터에서 플레이(Play-in-Editor, PIE) 또는 출시된 게임과 같은 게임 월드에서, 뷰 타깃을 소유 시네 카메라 액터(Cine Camera Actor)로 설정해야 하는 플레이어 컨트롤러를 결정합니다.
여러 출력 제공자에 한 정책이 설정되어 있을 수도 있으며, 여러 정책에서 같은 플레이어 컨트롤러를 선택해 뷰 타깃을 설정했을 수도 있습니다. 플레이어 컨트롤러에 이미 시네 카메라 액터가 뷰 타깃으로 설정되어 있는지 확인하고 설정되어 있다면 해당 정책을 사용하지 않음으로써 이러한 상충을 해결할 수 있습니다. 즉, 필요에 따라 VCam 컴포넌트에서 출력 제공자 배열을 정렬할 수 있으며, 첫 번째 정책이 우선순위가 가장 높은 정책이 됩니다.
|
| 레이어 타깃(Layer Targets) |
요청한 UMG를 렌더링할 컴포셔 스택 컴포짓 엘리먼트 목록입니다. |
| 최종 출력 렌더 타깃(Final Output Render Target) |
최종 출력이 포함되는 텍스처 렌더 타깃 2D(Texture Render Target 2D)에셋을 할당합니다. |
VCam 입력 액션
모디파이어 연결 포인트는 실험단계 기능입니다.
입력 액션은 모디파이어 블루프린트에서 하드웨어 입력에 매핑할 수 있는 입력입니다. 향상된 입력은 이 하드웨어 입력을 버추얼 카메라 같은 대상에 매핑하고 인젝션 및 연결 포인트를 사용하여 UMG 입력을 리매핑한다는 아이디어를 기반으로 개발되었습니다. 라이브 링크 VCam 앱의 위젯과 같은 VCam 위젯(UMG 위젯과 비슷함)을 사용하여 언리얼 엔진에서 버추얼 카메라 액터를 제어할 수 있습니다. 하드 레퍼런스나 캐스트 없이도 모디파이어에 리매핑할 수 있습니다. 연결 포인트 는 엘리먼트를 브리지하여 VCam 위젯(VCam Widget)을 리매핑하고 재사용할 수 있도록 합니다.
커스텀 버추얼 카메라 환경설정 예시
이 섹션에서는 시네 카메라 액터와 함께 VCam 컴포넌트를 사용하여 커스텀 버추얼 카메라를 구성하고 환경설정하는 방법을 예시를 통해 설명합니다. 이 프로세스에서는 이 페이지에서 앞서 언급한 모든 엘리먼트를 사용하여 간단한 예시를 빌드해 이러한 요소가 어떻게 상호작용하고 서로 연결되는지 보여줍니다.
이 환경설정 가이드에서는 커스텀 버추얼 카메라를 생성하고 다음과 같은 함수 기능을 생성해 적용합니다.
- 시네 카메라 및 VCam 컴포넌트를 사용하여 커스텀 버추얼 카메라를 생성합니다.
- 씬에서 버추얼 카메라를 사용하여 지정된 오브젝트를 트래킹하는 블루프린트와 로직을 구성합니다.
- 버추얼 카메라의 오브젝트 트래킹 기능을 켜고 끌 수 있도록 블루프린트 로직을 확장합니다.
- 스크립팅된 블루프린트 로직을 사용하도록 VCam 위젯을 구성합니다.
- 스테이트(켜짐/꺼짐)에 따라 버튼 색이 변하도록 블루프린트 로직을 더 확장합니다.
이 가이드에 따라 진행하고 나면, 연결 포인트와 함께 모디파이어, 출력 제공자, 입력 액션을 사용하여 버추얼 카메라에 사용할 다양한 이펙트와 행동을 빌드하는 방법을 더 명확하게 이해하게 될 것입니다.
커스텀 버추얼 카메라 생성하기
커스텀 버추얼 카메라를 빌드하는 방법은 다음과 같습니다.
- 레벨 에디터(Level Editor)의 액터 배치(Place Actors) 패널을 사용하여 씬에 시네 카메라(Cine Camera) 액터를 추가합니다.
-
시네 카메라를 선택한 상태로 디테일(Details) 패널에서 + 추가(Add) 컴포넌트 메뉴를 클릭하고 목록에서 VCam 컴포넌트를 선택합니다.
- 시네 카메라의 자손이 되도록 VCam 컴포넌트를 클릭하여 CameraComponent 로 드래그합니다.
컴포넌트 계층구조가 아래 예시와 같은 모습일 것입니다.
커스텀 모디파이어 생성하기
이 섹션에서는 모디파이어 블루프린트를 생성합니다. 이 블루프린트에는 버추얼 카메라에 적용하여 이펙트를 생성할 수 있는 행동과 로직이 포함되어 있습니다. 이 예시에서 생성할 블루프린트는 씬에서 버추얼 카메라를 사용하여 지정된 오브젝트를 트래킹하는 데 사용됩니다.
이 섹션은 VCam 모디파이어를 빌드하기 위한 몇 가지 작은 단계로 나누어져 있으며, 이러한 워크플로를 따라 다음과 같은 결과를 얻을 수 있습니다.
모디파이어 블루프린트 생성하기
VCam 모디파이어 블루프린트를 생성하는 방법은 다음과 같습니다.
-
콘텐츠 브라우저에서 + 추가(Add) > VCam 을 클릭하고 VCam 모디파이어(VCam Modifier) 블루프린트 에셋을 추가합니다. 이름을 VCM_LookAt 으로 지정합니다.
-
입력 매핑 컨텍스트 선택(Select Input Mapping Context) 팝업 창이 열리면서 메시지가 표시됩니다. 건너뛰기(Skip) 를 선택해도 됩니다.
입력 매핑 에셋 및 그 사용법에 대한 자세한 내용은 향상된 입력을 참조하세요.
이제 모디파이어 블루프린트를 생성했습니다. 이 가이드의 나머지 부분에서 이 블루프린트를 사용할 것입니다.
액터 레퍼런스 변수 구성하기
이 단계에서는 모디파이어 블루프린트의 그래프에서 사용하는 변수를 구성합니다. 이러한 변수는 레벨에서 카메라가 트래킹할 오브젝트를 지정합니다.
이런 타입의 변수를 구성할 때는 씬에 있는 액터에 대한 모든 레퍼런스를 모디파이어 블루프린트에서 정의해야 합니다.
액터 레퍼런스 변수로 모디파이어를 구성하는 방법은 다음과 같습니다.
- VCM_LookAt 모디파이어 블루프린트를 엽니다.
-
내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리에서 추가(+) 아이콘을 클릭하여 새 변수를 추가합니다.
- 해당 변수에 대한 텍스트 필드를 클릭하고 이름을 'TargetActor'로 지정합니다.
-
부울(Boolean) 타입을 클릭하고 타입을 오브젝트 타입(Object Type) > 액터(Actor) 로 변경한 다음 오브젝트 레퍼런스(Object Reference) 를 선택합니다.
-
내 블루프린트(My Blueprint) 패널에서 TargetActor 변수를 선택한 상태로 디테일(Details) 패널의 변수(Variables) 카테고리에서 인스턴스 편집가능(Instance Editable) 체크박스에 체크합니다.
변수 이름 옆의 눈 모양 아이콘을 클릭해도 디테일 패널에서 인스턴스 편집가능 에 체크한 것과 똑같이 설정됩니다.
이 단계에서 구성한 레퍼런스 변수는 이후 버추얼 카메라의 모디파이어 스택에 모디파이어를 추가할 때 사용됩니다. 인스턴스 편집가능 으로 설정한 변수는 레벨에서 작업하는 동안 VCam 컴포넌트의 프로퍼티에 표시됩니다. 여기서 버추얼 카메라가 트래킹할 액터를 직접 설정할 수 있습니다.
모디파이어 블루프린트 로직 생성하기
이 단계에서는 VCM_LookAt 모디파이어 블루프린트의 그래프에서 몇 가지 초기 로직을 생성합니다. 이 로직은 버추얼 카메라에 오브젝트의 위치를 제공함으로써 TargetActor 변수를 사용하여 월드에서 오브젝트를 트래킹하는 데 사용됩니다. 언리얼 엔진은 이 정보를 사용하여 뷰에 오브젝트가 유지되도록 버추얼 카메라를 회전합니다.
모디파이어 블루프린트에 로직을 추가하는 방법은 다음과 같습니다.
- VCM_LookAt 모디파이어 블루프린트를 엽니다.
- 내 블루프린트(My Blueprint) 패널의 변수 카테고리에서 TargetActor 변수를 클릭하고 이벤트 그래프(Event Graph) 에 드래그합니다. Get TargetActor 를 선택합니다.
- TargetActor 노드의 출력 핀을 드래그하여 Is Valid 노드를 추가합니다.
- Event On Apply 노드를 Is Valid 노드에 연결합니다.
- Event On Apply 노드의 Camera Component 출력을 드래그하여 Get World Location 노드를 추가합니다.
- Get World Location 노드의 Return Value 핀을 드래그하여 Find Look at Rotation 노드를 추가합니다.
- Event On Apply 노드의 Camera Component 핀을 드래그하여 Set World Rotation 노드를 추가합니다.
- Is Valid 노드의 Is Valid 핀을 Set World Rotation 노드에 연결합니다.
- TargetActor 노드를 드래그하여 Get Actor Location 노드를 추가합니다.
- Get Actor Location 노드의 Return Value 핀을 드래그하여 Find Look at Rotation 노드의 Target 핀에 연결합니다.
- Find Look at Rotation 노드의 Return Value 핀을 드래그하여 Set World Rotation 노드의 New Rotation 핀에 연결합니다.
- 컴파일 및 저장 합니다.
이제 모디파이어 블루프린트 구성이 완료됐으며 그래프는 다음 이미지와 비슷한 모습일 것입니다.
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_0" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_VariableGet_0"'
VariableReference=(MemberName="TargetActor",MemberGuid=7E8672B245E272DAA9034392D558C413,bSelfContext=True)
NodePosX=1744
NodePosY=176
NodeGuid=BF2F4FC846BB08B9C99EE9A324787C11
CustomProperties Pin (PinId=B50A7F6F4DCAA5498D8AD38FB752BCF2,PinName="TargetActor",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_0 4AC8905940F198E7AC1AB9B2037710F3,K2Node_CallFunction_2 81BA483240E9DC02A71F6EB96C6ABB7F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C22C3F4F4222E18C5BAA3FAB0C9E126D,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/NewBlueprint.NewBlueprint_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_0" ExportPath=/Script/BlueprintGraph.K2Node_MacroInstance'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_MacroInstance_0"'
MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:IsValid"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=64422BCD430703FF5CAEA8B79A32AA65)
NodePosX=1920
NodePosY=96
NodeGuid=C54DD5D84F91678FB503AE83B59474E4
CustomProperties Pin (PinId=258551E944817AD172A652ABD1D05A4E,PinName="exec",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=4AC8905940F198E7AC1AB9B2037710F3,PinName="InputObject",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_0 B50A7F6F4DCAA5498D8AD38FB752BCF2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=12E7215D4E091BAC45E4A3A228B72230,PinName="Is Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_4 5666EDF24A9E50CE89E87FBD5DB55B18,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=28706A844C1513C9A5A4F7BB25B8B494,PinName="Is Not Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_1" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_CallFunction_1"'
bIsPureFunc=True
bIsConstFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_GetComponentLocation")
NodePosX=1920
NodePosY=320
NodeGuid=5A4FECBD4CA724EAEEF14E8DA9D90D5D
CustomProperties Pin (PinId=874918304FFBB421973F4C98F6F157E2,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n씬 컴포넌트 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=DC6340CD4075DEE42ACD889D4BEE5CB1,PinName="ReturnValue",PinToolTip="반환 값\n벡터\n\n월드 스페이스에서 컴포넌트의 위치 반환",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_3 376497914FD38AEBD06281B2375EFEAD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_CallFunction_2"'
bIsPureFunc=True
bIsConstFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.Actor"',MemberName="K2_GetActorLocation")
NodePosX=1920
NodePosY=224
NodeGuid=097D523547BA566DF69D94A49CCC12C3
CustomProperties Pin (PinId=81BA483240E9DC02A71F6EB96C6ABB7F,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n액터 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_0 B50A7F6F4DCAA5498D8AD38FB752BCF2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=DB35A8BF4EBBF691C9B0E5838CCAA38B,PinName="ReturnValue",PinToolTip="반환 값\n벡터\n\n이 액터의 RootComponent 위치 반환",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_3 B78B01804B10A622C6A3858627D4CEDA,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_3" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_CallFunction_3"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="FindLookAtRotation")
NodePosX=2256
NodePosY=208
NodeGuid=1F82BE0C4687B3D2BB4F1CBC7B32D145
CustomProperties Pin (PinId=0FD52FF647E6C3414676AE9368CAF236,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=376497914FD38AEBD06281B2375EFEAD,PinName="Start",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_1 DC6340CD4075DEE42ACD889D4BEE5CB1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=B78B01804B10A622C6A3858627D4CEDA,PinName="Target",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_2 DB35A8BF4EBBF691C9B0E5838CCAA38B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=DFAE89C744120F146A0F19AA3028C0A5,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_4 66DBF2C7459298D609193EADCC1B164A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_4" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_CallFunction_4"'
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_SetWorldRotation")
NodePosX=2496
NodePosY=80
AdvancedPinDisplay=Hidden
NodeGuid=2931C72C498A3E59DE4385A995B567C9
CustomProperties Pin (PinId=5666EDF24A9E50CE89E87FBD5DB55B18,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_0 12E7215D4E091BAC45E4A3A228B72230,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=489CFEFB4CFFEDB92E4D109FCC349488,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=116CE1FD4FAD42BFAF9B23A7BACF7F22,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_1 5058456C48AC97C1F980DABF73EDA686,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=66DBF2C7459298D609193EADCC1B164A,PinName="NewRotation",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_3 DFAE89C744120F146A0F19AA3028C0A5,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=75C92014434EBBA4702A60AB42360511,PinName="bSweep",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=01A2B543491D77233F632487AFCCFB37,PinName="SweepHitResult",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=8E5E8B674FE0F9470505DFB11E2E6F2D,PinName="bTeleport",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_0" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_Knot_0"'
NodePosX=1808
NodePosY=16
NodeGuid=B163B6BB402F101786F18FBE32339F60
CustomProperties Pin (PinId=511DD4974091469C69185AA4A05B6888,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=EFFFB1D7430E24600171D48E38740D48,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_1 D6E38B3346ED6462F04840A16A8B2E11,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_1" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/NewBlueprint.NewBlueprint:EventGraph.K2Node_Knot_1"'
NodePosX=2304
NodePosY=16
NodeGuid=33E52DD4430E54788FC2C6B4980F05F5
CustomProperties Pin (PinId=D6E38B3346ED6462F04840A16A8B2E11,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_0 EFFFB1D7430E24600171D48E38740D48,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5058456C48AC97C1F980DABF73EDA686,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_4 116CE1FD4FAD42BFAF9B23A7BACF7F22,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
위의 블루프린트 코드를 복사하고 VCM_LookAt 모디파이어에 직접 붙여 넣어 자신의 프로젝트에서 위의 그래프를 다시 생성해 보세요.
경유(Reroute) 노드를 사용하여 그래프를 정리하면 선이 어디로 이어지는지 쉽게 파악할 수 있습니다. 이는 여러 개의 선이 들어가거나 나가는 핀이 있을 때 특히 유용합니다. 선을 더블클릭하면 경유 노드가 추가됩니다. 경유 노드를 선택하고 레벨의 다른 노드처럼 드래그하여 선의 방향을 변경할 수 있습니다.
VCam 컴포넌트 스택에 모디파이어 추가하기
모디파이어 블루프린트가 완성됐으니, 이제 씬에 있는 버추얼 카메라의 모디파이어 스택 에 이 블루프린트를 적용할 수 있습니다.
VCam 컴포넌트에 모디파이어를 추가하는 방법은 다음과 같습니다.
- 생성한 버추얼 카메라 액터를 레벨에서 선택합니다.
- 디테일(Details) 패널의 계층구조 창에서 VCam 컴포넌트를 선택합니다.
-
버추얼 카메라 프로퍼티에서 모디파이어 스택 을 찾아 추가(+) 아이콘을 클릭해 엘리먼트를 스택에 추가합니다.
-
추가한 인덱스 [0] 이라는 모디파이어 스택 엘리먼트에서 프로퍼티를 펼쳐 이름(Name) 텍스트 필드에 이 모디파이어 이름을 'LookAt'으로 입력합니다.
-
생성된 모디파이어(Generated Modifier) 의 드롭다운 목록을 사용하여 이 가이드 앞부분에서 생성한 VCM_LookAt 모디파이어 블루프린트를 선택합니다.
- 생성된 모디파이어(Generated Modifier) > 디폴트(Default) 를 펼쳐 프로퍼티를 표시합니다.
-
타깃 액터(Target Actor) 드롭다운을 사용하여 버추얼 카메라가 레벨에서 트래킹할 액터를 선택합니다.
테스트할 액터가 필요하면 액터 배치(Place Actors) 패널에 있는 셰이프(Shapes) 액터를 사용하면 됩니다. 이는 큐브, 원기둥, 스피어, 원뿔 같은 단순한 셰이프입니다.
이제 씬에서 오브젝트가 움직이는 대로 트래킹할 수 있는 기능을 부여하도록 모디파이어 블루프린트를 구성해 버추얼 카메라에 할당했습니다.
모디파이어의 행동 수정하기
버추얼 카메라에 할당된 VCM_LookAt 모디파이어 블루프린트는 레벨에서 지정된 오브젝트의 위치를 트래킹합니다. 이 섹션에서는 스크립팅된 블루프린트 행동을 확장하여 버추얼 카메라의 오브젝트 트래킹 기능을 켜고 끄는 로직을 추가합니다.
모디파이어에 행동을 추가하는 방법은 다음과 같습니다.
- VCM_LookAt 모디파이어 블루프린트를 엽니다.
- 이벤트 그래프에서 Event On Apply 노드를 클릭하여 왼쪽으로 드래그해 Is Valid 노드 앞에 추가 로직을 배치할 공간을 확보합니다.
- Event On Apply 노드에서 Camera Component 핀을 우클릭하고 목록에서 변수로 승격(Promote to Variable) 을 선택합니다.
- 내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리에서 Camera Component 변수를 선택합니다.
- 디테일(Details) 패널에서 고급(Advanced) 카테고리를 펼쳐 트랜션트(Transient) 옆의 체크박스에 체크합니다.
- Event On Apply 노드를 Set Camera Component 노드에 연결합니다.
- 내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리를 에서 추가(+) 아이콘을 클릭하여 Boolean 변수를 추가합니다. 변수 이름을 'ShouldLookAt'으로 지정합니다.
- ShouldLookAt 변수를 클릭하여 이벤트 그래프에 드래그한 다음 Get ShouldLookAt 을 선택합니다.
- ShouldLookAt 노드를 드래그하여 Branch 노드를 추가합니다.
- Set Camera Component 노드를 Branch 노드에 연결합니다.
- Branch 노드의 True 실행을 Is Valid 노드에 연결합니다.
- 내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리에서 Camera Component 변수를 그래프에 드래그하고 Get Camera Component 를 선택합니다.
- Camera Component 노드의 출력 핀을 드래그하여 Set World Rotation 노드를 추가합니다.
- Camera Component 노드의 출력 핀을 드래그하여 Get World Rotation 노드를 추가합니다.
- Get World Rotation 노드의 Return Value 핀을 드래그하여 Set World Rotation 노드의 New Rotation 핀에 연결합니다.
- Branch 노드의 False 실행을 드래그하여 Set World Rotation 노드에 연결합니다.
- 컴파일 및 저장 합니다.
아래 이미지에 하이라이트된 추가된 로직은 Branch 노드를 사용하여 버추얼 카메라의 오브젝트 트래킹 기능을 켜고 끕니다. True 경로를 따르는 경우 카메라는 레벨에서 지정된 오브젝트를 트래킹합니다. False 경로를 사용하는 경우 카메라는 트래킹을 중단합니다. 이 확장된 로직은 이러한 행동을 수행하는 데 필요한 부분만 구성합니다. 이 가이드의 다음 섹션에서는 VCam 위젯을 사용하여 화면에서 이 행동을 토글하는 버튼에 대한 Should Look At 스테이트를 트래킹하는 데 이 로직을 사용합니다.
이제 VCM_LookAt 모디파이어 블루프린트의 그래프는 아래와 같은 모습일 것입니다.
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_0" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_VariableGet_0"'
VariableReference=(MemberName="TargetActor",MemberGuid=E54FF4EA40AC7F265D6FD491447D55EF,bSelfContext=True)
NodePosX=400
NodePosY=432
NodeGuid=A75708504CB32371D15BBCB48C3AFFE8
CustomProperties Pin (PinId=15ABA2FD4CB6C4C4CFA61FAC683BA11C,PinName="TargetActor",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_0 5832F75848CA2DF0B26D458D70904493,K2Node_CallFunction_4 906BFDAF421F41DD1D8CB6BC7B232EA7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=09B0483D451A90DD5A246B9305BE0447,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_0" ExportPath=/Script/BlueprintGraph.K2Node_MacroInstance'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_MacroInstance_0"'
MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:IsValid"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=64422BCD430703FF5CAEA8B79A32AA65)
NodePosX=544
NodePosY=368
NodeGuid=B8C1784B459960C53A95519C394A7700
CustomProperties Pin (PinId=CD6595AB4AAB442EE35B7CBFC25BB609,PinName="exec",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_0 6F06745641660347F37593B74DEECF1F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5832F75848CA2DF0B26D458D70904493,PinName="InputObject",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_0 15ABA2FD4CB6C4C4CFA61FAC683BA11C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=1D60A8504059FD5578E71CAAC8E61746,PinName="Is Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_3 B016745B4EAB9237A873EE8BAB79054F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=AC30D2EF4B8FC3899F9B2A83DBE39D76,PinName="Is Not Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_1" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_CallFunction_1"'
bIsPureFunc=True
bIsConstFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_GetComponentLocation")
NodePosX=544
NodePosY=576
NodeGuid=0358EBC84E82A12B49C184897327F78F
CustomProperties Pin (PinId=2E3C085B4A759DA0780250BEF86E075D,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n씬 컴포넌트 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_2 B3353B87423045BF5EF9D18AC21C0589,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5400217048B5315A2D873187187069E6,PinName="ReturnValue",PinToolTip="반환 값\n벡터\n\n월드 스페이스에서 컴포넌트의 위치 반환",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_2 495CDF164A39EFC52420F5BFC1ED515B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_CallFunction_2"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="FindLookAtRotation")
NodePosX=816
NodePosY=544
NodeGuid=DB72C77D4EF19C12D9D0078B9CC409D0
CustomProperties Pin (PinId=BAF60E134AA7E82D49FCC98047CF517E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n키즈멧 수학 라이브러리 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=495CDF164A39EFC52420F5BFC1ED515B,PinName="Start",PinToolTip="시작\n벡터(레퍼런스로)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_1 5400217048B5315A2D873187187069E6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=373D7A0445A28E861BD13891775CF1F5,PinName="Target",PinToolTip="타깃\n벡터(레퍼런스로)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_4 674B89A04A80B94D3C3EF4864F09D5D1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=CD5D74554D5E600CB97F2BB6657D9391,PinName="ReturnValue",PinToolTip="반환 값\n로테이터\n\n시작 위치의 오브젝트가 타깃 위치를 가리키게 할 회전 값을 찾습니다.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_3 4BB2816044141B8784FB4F92E045DC3A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_3" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_CallFunction_3"'
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_SetWorldRotation")
NodePosX=1088
NodePosY=352
AdvancedPinDisplay=Hidden
NodeGuid=95F390984B99E5ECA4B81D900F9D3563
CustomProperties Pin (PinId=B016745B4EAB9237A873EE8BAB79054F,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_0 1D60A8504059FD5578E71CAAC8E61746,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=22FEC78C4155F3C40A52F0B5CD6E4A65,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=CD4DA2284BCF79CDB3FDAAA14718F5C1,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n씬 컴포넌트 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_0 978D297E4275209BA537C1B79172EAA2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=4BB2816044141B8784FB4F92E045DC3A,PinName="NewRotation",PinToolTip="새 회전\n로테이터\n\n월드 스페이스에서 컴포넌트의 새 회전입니다. ",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_2 CD5D74554D5E600CB97F2BB6657D9391,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=4A0E8C5D4298A89A5999C5AC512ECD14,PinName="bSweep",PinToolTip="스윕\n부울\n\n대상으로 스윕할지 여부입니다(현재 회전에 대해서는 지원되지 않음). ",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=0865B03F42445B611EF84380305C5876,PinName="SweepHitResult",PinToolTip="스윕 히트 결과\n히트 결과 구조\n\n스윕이 true인 경우 모든 영향으로 인한 히트 결과입니다. ",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=9F5F01E84FDE5FBE215C1AB4F2CE0428,PinName="bTeleport",PinToolTip="텔레포트\n부울\n\n피직스 스테이트를 텔레포트할지 여부입니다(피직스 콜리전이 이 오브젝트에 대해 활성화된 경우). true인 경우 이 오브젝트의 피직스 속도가 변경되지 않습니다(따라서 래그돌 부분이 위치 변경에 의한 영향을 받지 않음). false인 경우 피직스 속도가 위치 변화에 따라 업데이트됩니다(래그돌 부분에 영향을 미침). CCD가 켜져 있고 텔레포트하지 않는 경우 전체 스윕 볼륨에 걸쳐 오브젝트에 영향을 미칩니다.",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_4" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_CallFunction_4"'
bIsPureFunc=True
bIsConstFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.Actor"',MemberName="K2_GetActorLocation")
NodePosX=544
NodePosY=480
NodeGuid=4B2E89F749A6053C26B844B1B546BE2C
CustomProperties Pin (PinId=906BFDAF421F41DD1D8CB6BC7B232EA7,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n액터 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_0 15ABA2FD4CB6C4C4CFA61FAC683BA11C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=674B89A04A80B94D3C3EF4864F09D5D1,PinName="ReturnValue",PinToolTip="반환 값\n벡터\n\n이 액터의 RootComponent 위치 반환",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_2 373D7A0445A28E861BD13891775CF1F5,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_0" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_Knot_0"'
NodePosX=944
NodePosY=288
NodeGuid=0BE53424434D894F747682919F4D4014
CustomProperties Pin (PinId=866CE3DD43A5BC953FDB5593B23888A7,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_1 07B37604454F57CA7F90C785680CEF91,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=978D297E4275209BA537C1B79172EAA2,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_3 CD4DA2284BCF79CDB3FDAAA14718F5C1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_1" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_Knot_1"'
NodePosX=-144
NodePosY=288
NodeGuid=FADE03B64369540438FE77AAE83ADF6A
CustomProperties Pin (PinId=D817DA194A9965A7EF919BA8C1BE7340,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Event_2 0B845C03499F0BBE67C9E691AC58599D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=07B37604454F57CA7F90C785680CEF91,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_0 866CE3DD43A5BC953FDB5593B23888A7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableSet Name="K2Node_VariableSet_0" ExportPath=/Script/BlueprintGraph.K2Node_VariableSet'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_VariableSet_0"'
VariableReference=(MemberName="Camera Component",MemberGuid=714A37E34FB324FD2C05DEBC1B29507D,bSelfContext=True)
NodePosX=-128
NodePosY=384
NodeGuid=0B50AFDA44E66C048BAAA1B2143A38B1
CustomProperties Pin (PinId=BC49A7BB4E27AAF90080FC9E9A849132,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Event_2 BE7177D54CBF6ACA286B63BF5755EB35,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=85BC16284B5BC5C7DF5D679766E2D4CE,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_0 7B4591D94B23EF21B85C0496FE7A752E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=33D57DC747AB8CAA438793AEE00546B1,PinName="Camera Component",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Event_2 0B845C03499F0BBE67C9E691AC58599D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=CCC11AE44E7477377FA473B037873196,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=29B01AE94EAA0E8BD146CAB77401113A,PinName="Output_Get",PinToolTip="변수의 값을 검색하며, 별도의 Get 노드 대신 사용할 수 있음",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_1" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_VariableGet_1"'
VariableReference=(MemberName="ShouldLookAt",MemberGuid=93C2D2AA4B957A78A74C3E88BB23AD04,bSelfContext=True)
NodePosX=-48
NodePosY=528
NodeGuid=C908343A44AA1AAFE00E95BC4559189A
CustomProperties Pin (PinId=B3EC71C14EEC610F7AFB6283D70D5523,PinName="ShouldLookAt",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",LinkedTo=(K2Node_IfThenElse_0 44841FEA41CBA64B59A936A4DE4117B3,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=425398A64D13B284A49A86856C4CC38E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_IfThenElse Name="K2Node_IfThenElse_0" ExportPath=/Script/BlueprintGraph.K2Node_IfThenElse'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_IfThenElse_0"'
NodePosX=144
NodePosY=368
NodeGuid=61D528754E264C99EB8AEFB90F20BC81
CustomProperties Pin (PinId=7B4591D94B23EF21B85C0496FE7A752E,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableSet_0 85BC16284B5BC5C7DF5D679766E2D4CE,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=44841FEA41CBA64B59A936A4DE4117B3,PinName="Condition",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="true",AutogeneratedDefaultValue="true",LinkedTo=(K2Node_VariableGet_1 B3EC71C14EEC610F7AFB6283D70D5523,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=6F06745641660347F37593B74DEECF1F,PinName="then",PinFriendlyName=NSLOCTEXT("K2Node", "true", "true"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_0 CD6595AB4AAB442EE35B7CBFC25BB609,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=10E21F5C46751E7D599D5D8A5B00C7AD,PinName="else",PinFriendlyName=NSLOCTEXT("K2Node", "false", "false"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_5 C63C94B946FD2603CC6D7AAF02A6A2B5,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_2" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_VariableGet_2"'
VariableReference=(MemberName="Camera Component",MemberGuid=714A37E34FB324FD2C05DEBC1B29507D,bSelfContext=True)
NodePosX=112
NodePosY=752
NodeGuid=AC4753AF4C17C44529D927AB98D438D6
CustomProperties Pin (PinId=CEDA0B21483111068A408DB7F3ED2799,PinName="Camera Component",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_5 37D91B1B4CA33F53FD1CE6ABF19E9CB7,K2Node_CallFunction_6 E673A28B4FF0A12DC1DE32B5FBEB93DE,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9F09568C4E40092785857DA0DAC5DD61,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_5" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_CallFunction_5"'
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_SetWorldRotation")
NodePosX=544
NodePosY=704
AdvancedPinDisplay=Hidden
NodeGuid=01F9CD8548AE3030F3138D8363DE7A0B
CustomProperties Pin (PinId=C63C94B946FD2603CC6D7AAF02A6A2B5,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_0 10E21F5C46751E7D599D5D8A5B00C7AD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=A642D4AC4013A546A48AE3A1D8B94D3D,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=37D91B1B4CA33F53FD1CE6ABF19E9CB7,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_2 CEDA0B21483111068A408DB7F3ED2799,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=D41E000F4F57269B3B4F21A340A5F301,PinName="NewRotation",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_6 2C5F75DA441B31A0F961CABAE26DB682,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=7444268A4591D152B547D580B94BF549,PinName="bSweep",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=688ADCFF46C42C423A846986D4E9DB4D,PinName="SweepHitResult",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=D9DCE7A943EDF7DCB02135BD56FFADCA,PinName="bTeleport",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_6" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_CallFunction_6"'
bIsPureFunc=True
bIsConstFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_GetComponentRotation")
NodePosX=304
NodePosY=800
NodeGuid=BC722671428BFFBAA7B87C942E9CD6BE
CustomProperties Pin (PinId=E673A28B4FF0A12DC1DE32B5FBEB93DE,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_2 CEDA0B21483111068A408DB7F3ED2799,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=2C5F75DA441B31A0F961CABAE26DB682,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",LinkedTo=(K2Node_CallFunction_5 D41E000F4F57269B3B4F21A340A5F301,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_2" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_Knot_2"'
NodePosX=-160
NodePosY=624
NodeGuid=0F54C22B400BB621B6758698D4F44DE8
CustomProperties Pin (PinId=BCE50B344F1958EF7DB50EA8116CCD27,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Event_2 0B845C03499F0BBE67C9E691AC58599D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=B3353B87423045BF5EF9D18AC21C0589,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CinematicCamera.CineCameraComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_1 2E3C085B4A759DA0780250BEF86E075D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
위의 블루프린트 코드를 복사하고 VCM_LookAt 모디파이어에 직접 붙여 넣어 자신의 프로젝트에서 위의 그래프를 다시 생성해 보세요.
향상된 입력 사용하기
버추얼 카메라의 모디파이어는 향상된 입력 액션을 사용하여 VCam 운영자에게 추가 제어 기능을 제공할 수 있습니다. 이 섹션에서는 이러한 향상된 입력 액션을 사용하여 VCM_LookAt 모디파이어 블루프린트에 구성된 키 입력 로직을 제어해 버추얼 카메라의 오브젝트 트래킹을 켜고 끕니다. 즉, 스테이지 운영자가 키보드의 키를 눌러 이 함수 기능을 사용할 수 있습니다.
입력 액션 생성하기
향상된 입력 액션을 사용하려면 입력 액션(Input Action) 과 입력 매핑 컨텍스트(Input Mapping Context), 이렇게 두 개의 에셋이 필요합니다. 이 두 에셋은 키 입력을 VCM_LookAt 모디파이어 블루프린트에 구성된 로직과 연결하는 데 사용됩니다.
입력 액션 및 입력 매핑 컨텍스트 생성 방법은 다음과 같습니다.
-
콘텐츠 브라우저에서 + 추가(Add) > 입력(Input) 을 클릭하고 다음 두 항목을 추가합니다.
- 입력 액션(Input Action) 을 추가하고 이름을 IA_ToggleActivation 으로 지정합니다.
- 입력 매핑 컨텍스트(Input Mapping Context) 를 추가하고 이름을 IMC_LookAt 으로 지정합니다.
-
IMC_LookAt 입력 매핑 컨텍스트 에셋을 엽니다.
-
디테일(Details) 패널에서 매핑(Mappings) 옆에 있는 추가(+) 아이콘을 클릭하여 배열에 새 입력 액션 엘리먼트를 추가합니다. 해당 프로퍼티를 펼쳐 이 섹션 첫 단계에서 생성한 IA_ToggleActivation 입력 액션을 선택합니다.
-
IA_ToggleActivation 엘리먼트 아래의 키보드 아이콘 옆에 있는 드롭다운 메뉴를 사용하여 S 키 입력을 이 입력 액션의 디폴트 키로 할당합니다.
- 키 입력 할당 아래의 프로퍼티를 펼쳐 플레이어 매핑 가능 여부(Is Player Mappable) 옆의 체크박스에 체크합니다.
-
플레이어 매핑 가능 옵션(Player Mappable Options) 아래의 프로퍼티를 펼쳐 이름(Name) 텍스트 필드에 'IA_ToggleActivation'이라고 입력합니다.
입력 매핑 컨텍스트 에셋 환경설정에 대한 자세한 내용은 향상된 입력 문서를 참조하세요.
모디파이어 블루프린트에 입력 액션 할당하기
이 섹션에서는 이전 섹션에서 생성한 입력 매핑 컨텍스트를 VCM_LookAt 모디파이어 블루프린트와 함께 사용합니다. 입력 매핑 컨텍스트를 VCM_LookAt에 할당하고 오브젝트 트래킹 스테이트를 처리하기 위한 몇 가지 추가 로직을 구성합니다.
모디파이어 블루프린트에 입력 액션을 할당하는 방법은 다음과 같습니다.
- 앞서 이 페이지의 모디파이어 블루프린트 생성하기 섹션에서 생성한 VCM_LookAt 모디파이어 블루프린트를 엽니다.
-
블루프린트 툴바에서 클래스 디폴트(Class Defaults) 를 선택합니다.
-
디테일(Details) 패널의 VCam 입력(VCam Input) 카테고리에서 IMC_LookAt 에셋을 입력 매핑 컨텍스트(Input Mapping Context) 할당 슬롯에 할당합니다.
- 이벤트 그래프 를 우클릭하고 향상된 입력 액션 아래에서 IA_ToggleActivation 노드를 검색하여 추가합니다. 이 이벤트의 이름은 앞서 생성한 IA_ToggleActivation 입력 액션의 이름을 따서 지정되었습니다.
- 내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리에서 ShouldLookAt 변수를 그래프에 드래그하고 목록에서 Get ShouldLookAt 을 선택합니다.
- ShouldLookAt 부울을 드래그하여 Branch 노드를 추가합니다.
- Enhanced Action Events IA_ToggleActivation 이벤트 노드의 Triggered 핀을 드래그하여 Branch 노드에 연결합니다.
- 내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리에서 ShouldLookAt 변수를 그래프에 드래그하고 Get ShouldLookAt 을 선택합니다.
- Set ShouldLookAt 노드에서 ShouldLookAt 부울 옆의 체크박스의 체크를 해제합니다. 한 번 더 이 작업을 수행해 Set ShouldLookAt 노드가 두 개가 되도록 합니다.
- Branch 노드의 True 핀을 드래그하여 Set ShouldLookAt 노드 중 하나의 입력에 연결합니다.
- Branch 노드의 False 핀을 드래그하여 다른 Set ShouldLookAt 노드의 입력에 연결합니다.
-
Branch 노드의 True 경로가 연결된 Set ShouldLook 노드에서 Should Look At 입력 핀의 체크박스에 체크합니다.
- 컴파일 및 저장 합니다.
이 단계를 완료했으니 IMC_LookAt 입력 매핑 컨텍스트 에셋이 VCM_LookAt에 할당되었습니다. 또한 IA_ToggleActivation 입력 액션의 스테이트가 True인지 False인지 결정하는 로직도 추가했습니다.
이제 그래프가 아래 이미지와 같은 모습일 것입니다.
새로운 이벤트와 로직은 아래와 같은 모습일 것입니다.
Begin Object Class=/Script/InputBlueprintNodes.K2Node_EnhancedInputAction Name="K2Node_EnhancedInputAction_0" ExportPath=/Script/InputBlueprintNodes.K2Node_EnhancedInputAction'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_EnhancedInputAction_0"'
InputAction=/Script/EnhancedInput.InputAction'"/Game/VCamComponentSetup/IA_ToggleActivation.IA_ToggleActivation"'
NodePosX=-400
NodePosY=992
AdvancedPinDisplay=Hidden
NodeGuid=3A67269B4A3FE05C417F7BB9E50114ED
CustomProperties Pin (PinId=5F5BF46C42CE8A3A1E29D393BD7310D4,PinName="Triggered",PinToolTip="하나 이상의 프로세싱 틱 이후 트리거링이 발생했습니다.",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_2 CE1D444D42E19EF59733E3B380975B0A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=FAF365714FECF4180224099B2D1E96BC,PinName="Started",PinToolTip="트리거 평가를 시작한 이벤트가 발생했습니다. 참고: 이 프레임에서 트리거됨(Triggered) 상태가 발생할 수도 있습니다.",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=D81142744792EAFDC3C66BBAEEFAA227,PinName="Ongoing",PinToolTip="트리거링이 여전히 처리 중입니다.",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=027FB6BC4988818FE13A04BC4D5FA000,PinName="Canceled",PinToolTip="트리거링이 취소되었습니다.",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=23FD0CAB49FCFA0132007CA8C1F55796,PinName="Completed",PinToolTip="이 프레임에서 트리거 스테이트가 트리거됨(Triggered)에서 없음(None)으로 전환되었습니다. 즉, 트리거링이 완료되었습니다.\n참고: 이 이벤트를 사용하면 시작됨(Started)/완료됨(Completed) 이벤트를 위한 트리거 세트가 하나로 제한됩니다. 각각 고유한 트리거 규칙이 있는 두 개의 액션을 선호할 수도 있습니다.\nTODO: 동일한 프레임에 진행 중(Ongoing)으로 보고되는 트리거가 있는 경우, 완료됨(Completed)은 발동되지 않지만 두 트리거 모두 발동되어야 합니다. 예를 들어 길게 누르기(= 진행 중(Ongoing)) + 눌림(= 없음(None)) 콤보의 두 가지 틱으로는 진행 중(Ongoing) 이벤트만 발동됩니다.",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=1520E3434EB28C7E01A730889E0A74BD,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C5D7C4194A119B453A9290B12664A8A9,PinName="ElapsedSeconds",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=BE8DD63A480DAFB812F088A1737CFCD6,PinName="TriggeredSeconds",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=238B8CD84D6E766F912ABFA34B607963,PinName="InputAction",PinToolTip="입력 액션\n입력 액션 오브젝트 레퍼런스\n\이 이벤트를 발동시킨 입력 액션",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/EnhancedInput.InputAction"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="IA_ToggleActivation",DefaultObject="/Game/VCamComponentSetup/IA_ToggleActivation.IA_ToggleActivation",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_6" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_VariableGet_6"'
VariableReference=(MemberName="ShouldLookAt",MemberGuid=93C2D2AA4B957A78A74C3E88BB23AD04,bSelfContext=True)
NodePosX=-32
NodePosY=1088
NodeGuid=F48122854388DA73AB8194BFBA4A6161
CustomProperties Pin (PinId=FD3352CF484E87BC61F632B1636A26FB,PinName="ShouldLookAt",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",LinkedTo=(K2Node_IfThenElse_2 6C1FF80F4BB139F4CE7F19AC768F4E6E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=95AED2D147C1EB6B465673BE12BED4C5,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_IfThenElse Name="K2Node_IfThenElse_2" ExportPath=/Script/BlueprintGraph.K2Node_IfThenElse'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_IfThenElse_2"'
NodePosX=176
NodePosY=992
NodeGuid=DA25384E420F1DAD2F3190A11A492D6B
CustomProperties Pin (PinId=CE1D444D42E19EF59733E3B380975B0A,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_EnhancedInputAction_0 5F5BF46C42CE8A3A1E29D393BD7310D4,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=6C1FF80F4BB139F4CE7F19AC768F4E6E,PinName="Condition",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="true",AutogeneratedDefaultValue="true",LinkedTo=(K2Node_VariableGet_6 FD3352CF484E87BC61F632B1636A26FB,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=283698744449019BBB1BA9BCEE134650,PinName="then",PinFriendlyName=NSLOCTEXT("K2Node", "true", "true"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableSet_4 A9BE459942046FE6E2C0DAADB509EF86,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=61F861C64AC524625EF10BAFA8E7B41D,PinName="else",PinFriendlyName=NSLOCTEXT("K2Node", "false", "false"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableSet_3 A9BE459942046FE6E2C0DAADB509EF86,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableSet Name="K2Node_VariableSet_4" ExportPath=/Script/BlueprintGraph.K2Node_VariableSet'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_VariableSet_4"'
VariableReference=(MemberName="ShouldLookAt",MemberGuid=93C2D2AA4B957A78A74C3E88BB23AD04,bSelfContext=True)
NodePosX=480
NodePosY=1008
NodeGuid=56F54F7B4B4BEBCE2AA9A6BABD40D437
CustomProperties Pin (PinId=A9BE459942046FE6E2C0DAADB509EF86,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_2 283698744449019BBB1BA9BCEE134650,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C7DEC73343C28BB71230C384CC4E5B46,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5A464E9D4640E23BEBA168BBAF589040,PinName="ShouldLookAt",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="true",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=D07515604D8BC4037F9E28BD79B98243,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=4101688340A6705E0B0C2D89CFC8B2C3,PinName="Output_Get",PinToolTip="변수의 값을 검색하며, 별도의 Get 노드 대신 사용할 수 있음",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableSet Name="K2Node_VariableSet_3" ExportPath=/Script/BlueprintGraph.K2Node_VariableSet'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt:EventGraph.K2Node_VariableSet_3"'
VariableReference=(MemberName="ShouldLookAt",MemberGuid=93C2D2AA4B957A78A74C3E88BB23AD04,bSelfContext=True)
NodePosX=480
NodePosY=1120
NodeGuid=CF80F05A43AC9E639B73BEB3CAFA668F
CustomProperties Pin (PinId=A9BE459942046FE6E2C0DAADB509EF86,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_2 61F861C64AC524625EF10BAFA8E7B41D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C7DEC73343C28BB71230C384CC4E5B46,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5A464E9D4640E23BEBA168BBAF589040,PinName="ShouldLookAt",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=4101688340A6705E0B0C2D89CFC8B2C3,PinName="Output_Get",PinToolTip="변수의 값을 검색하며, 별도의 Get 노드 대신 사용할 수 있음",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=D07515604D8BC4037F9E28BD79B98243,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/VCM_LookAt.VCM_LookAt_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
위의 블루프린트 코드를 복사하고 VCM_LookAt 모디파이어에 직접 붙여 넣어 자신의 프로젝트에서 위의 그래프를 다시 생성해 보세요.
이 특별한 구성을 사용하면, 뷰포트에 포커스가 맞춰져 있지 않더라도 'S' 키를 누를 때마다 입력 시스템이 실행된다는 점에 유의하세요. 그렇기 때문에 누군가가 다른 목적으로 해당 키를 누를 경우 상충이 발생할 수 있습니다. 예를 들어, 다른 사용자가 콘텐츠 브라우저에서 에셋 이름을 변경하면서 's' 문자를 입력하면 이 이벤트가 실행됩니다.
버추얼 카메라에 출력 제공자 추가하기
출력 제공자 시스템은 VCam 컴포넌트의 출력을 원격 세션 프로토콜을 사용하는 디바이스와 뷰포트 등의 다양한 제공자에 경유시킬 수 있습니다. 각 버추얼 카메라에 대해 여러 출력 제공자를 사용할 수 있으며, 각 출력 제공자는 스택에 나열된 순서대로 사용됩니다.
이 섹션에서는 사용할 출력 제공자를 초기 구성하고 출력 제공자 타입을 선택합니다.
출력 제공자의 초기 구성
버추얼 카메라에 출력 제공자를 추가하는 방법은 다음과 같습니다.
- 버추얼 카메라 액터를 레벨에서 선택합니다.
-
디테일(Details) 패널의 컴포넌트(Components) 계층구조에서 VCam 컴포넌트를 선택합니다.
-
출력 제공자(Output Providers) 배열에서 추가(+) 아이콘을 클릭하여 새 엘리먼트를 추가하고 출력 제공자(Output Providers) 목록에서 제공자를 선택합니다. 출력 제공자를 배열에 추가하면 각 출력 제공자 타입에 대한 세팅이 해당 엘리먼트 아래에 채워집니다. 다음 타입 중에서 선택할 수 있습니다.
-
출력(Output) 프로퍼티의 활성 여부(Is Active) 옆에 있는 체크박스에 체크합니다.
출력 제공자마다 구성이 다릅니다. 각 출력 제공자 및 버추얼 카메라와 함께 작동하기 위해 필요한 추가 구성에 대한 자세한 내용은 아래 섹션에서 확인할 수 있습니다.
이 가이드에서는 픽셀 스트리밍 출력 제공자를 예시로 사용하여 필요한 iOS 디바이스 및 라이브 링크 VCam 앱 사용 등에 대해 설명합니다.
뷰포트 출력 제공자 구성하기
뷰포트 출력 제공자 프로퍼티 목록은 다음과 같습니다.
이 출력 제공자 프로퍼티에 대한 내용은 이 페이지의 뷰포트 출력 제공자 섹션을 참조하세요.
뷰포트 출력 제공자는 현재 버추얼 카메라의 뷰를 가져와 레벨 에디터의 메인 뷰포트에 직접 출력합니다. 또한, 아래 예시처럼 UMG 위젯도 화면에 표시할 수 있습니다. UMG 오버레이(UMG Overlay) 프로퍼티를 사용하여 출력 제공자에 위젯을 추가합니다. 예시 에셋인 TestUMG 를 사용하여 화면에 표시되는 작동 예시를 확인할 수 있습니다.
픽셀 스트리밍 출력 제공자 구성하기
이 출력 제공자를 사용하려면 지원되는 iOS 디바이스에서 라이브 링크 VCam 앱을 실행해야 합니다.
픽셀 스트리밍 출력 제공자 프로퍼티 목록은 다음과 같습니다.
이 출력 제공자 프로퍼티에 대한 내용은 이 페이지의 픽셀 스트리밍 출력 제공자 섹션을 참조하세요.
픽셀 스트리밍 출력 제공자를 설정하면 공유 네트워크에 있는 iOS 디바이스에서 라이브 링크 VCam 앱을 사용하여 레벨 에디터 뷰포트에 연결하고 버추얼 카메라를 제어할 수 있습니다. iOS 디바이스에서 에디터에 연결하고 구성하는 방법에 대한 자세한 내용은 라이브 링크를 사용하여 버추얼 카메라 액터 제어하기를 참조하세요.
언리얼 원격 출력 제공자 구성하기
이 출력 제공자를 사용하려면 지원되는 iOS 디바이스에서 라이브 링크 VCam 앱을 실행해야 합니다.
언리얼 원격 출력 제공자 프로퍼티 목록은 다음과 같습니다.
이 출력 제공자 프로퍼티에 대한 내용은 이 페이지의 언리얼 원격 출력 제공자 섹션을 참조하세요.
이 출력 제공자를 사용하려면 언리얼 엔진의 프로젝트 세팅과 라이브 링크 VCam 앱에서 추가 구성을 통해 연결을 설정해야 합니다.
언리얼 엔진 구성
- 언리얼 엔진에서 프로젝트 세팅(Project Settings) 을 엽니다.
-
플러그인(Plugins) 카테고리에서 UDP 메시지(UDP Message) 섹션으로 이동하여 유니캐스트 엔드포인트(Unicast Endpoint) 를 사용자 컴퓨터의 IP 주소로 설정합니다. IP 주소 끝에는 포트 번호를 나타내는 ':0'을 붙입니다. 예를 들어, 10.0.0.0:0과 같은 형식입니다.
-
프로젝트 세팅(Project Settings)의 엔진(Engine) > 렌더링(Rendering) 카테고리에서 디폴트 세팅(Default Settings) 으로 이동한 다음, 프레임 버퍼 픽셀 포맷(Frame Buffer Pixel Format) 프로퍼티의 드롭다운에서 8bit RGBA 를 선택합니다.
- 에디터를 재시작하여 변경사항을 적용합니다.
라이브 링크 VCam 앱을 사용하는 iOS 디바이스 구성
- iOS 디바이스에서 라이브 링크 VCam 앱을 엽니다.
- 화면 오른쪽 하단의 톱니바퀴 아이콘을 클릭하여 세팅(Settings) 을 엽니다.
-
연결 타입(Connection Type)을 원격 세션(Remote Session) 으로 변경합니다.
- 같은 공유 네트워크에서 연결하려는 컴퓨터의 IP 주소 를 입력합니다.
- 연결(Connect) 을 누릅니다.
그러면 라이브 링크 VCam 앱이 언리얼 에디터 세션에 연결되고 iOS 디바이스 화면에 에디터 뷰포트가 미러링될 것입니다.
미디어 출력 제공자 구성하기
이 출력 제공자는 언리얼 미디어 프레임워크에서 지원하는 디바이스에 출력해야 합니다.
미디어 출력 제공자 프로퍼티 목록은 다음과 같습니다.
이 출력 제공자 프로퍼티에 대한 내용은 이 페이지의 미디어 출력 제공자 섹션을 참조하세요.
미디어 출력 제공자를 구성하려면 출력 환경설정 할당 슬롯을 사용합니다.
언리얼 미디어 프레임워크 사용법에 대한 자세한 내용은 미디어 프레임워크를 참조하세요.
컴포셔 출력 제공자 구성하기
컴포셔 플러그인이 활성화되어 있어야 합니다.
컴포셔 출력 제공자 프로퍼티 목록은 다음과 같습니다.
이 출력 제공자 프로퍼티에 대한 내용은 이 페이지의 컴포셔 출력 제공자 섹션을 참조하세요.
레이어 타깃(Layer Targets) 배열을 사용하여 버추얼 카메라의 뷰를 렌더링할 렌더 타깃을 추가할 수 있습니다. 컴포셔 플러그인과 레이어 타깃 사용법에 대한 자세한 내용은 컴포셔 플러그인을 참조하세요.
연결 포인트를 사용하여 입력 액션 전달하기
모디파이어 연결 포인트는 실험단계 기능입니다.
이 가이드의 향상된 입력 사용하기 섹션에서 모디파이어를 통해 VCam 위젯 블루프린트 같은 다른 블루프린트에 전달할 수 있는 입력 액션(IA_ToggleActivation)을 생성했습니다. 연결 포인트 를 사용하여 이 입력을 전달할 수 있습니다.
이 섹션에서는 다음을 수행합니다.
- 모디파이어 블루프린트에 연결 포인트를 추가합니다.
- 버튼과 로직이 있는 VCam 위젯을 생성합니다.
- 연결 포인트를 관리할 HUD를 생성합니다.
모디파이어에 연결 포인트 추가하기
모디파이어 블루프린트에 연결 포인트를 추가하는 방법은 다음과 같습니다.
- VCM_LookAt 모디파이어 블루프린트를 엽니다.
-
블루프린트 툴바에서 클래스 디폴트(Class Defaults) 를 클릭합니다.
-
디테일(Details) 패널의 VCam 연결 포인트(VCam Connection Points) 카테고리에서 연결 포인트(Connection Points) 를 펼치고 추가(+) 아이콘을 클릭하여 새 엘리먼트를 추가합니다. 엘리먼트 이름을 'ToggleActivation'으로 지정합니다.
-
ToggleActivation 엘리먼트의 프로퍼티를 펼쳐 IA_ToggleActivation 입력 액션 에셋을 연결된 액션(Associated Action) 할당 슬롯에 할당합니다.
- 컴파일 및 저장 합니다.
VCam 위젯 및 초기 구성 생성하기
이 섹션에서는 VCam 위젯(VCam Widget) 에셋을 사용하여 버추얼 카메라의 오브젝트 트래킹을 켜고 끄는 데 사용될 버튼을 생성합니다. VCam 위젯은 입력을 받아들이고 모디파이어 연결 포인트에 대한 연결을 정의하는 기능이 UMG 위젯과는 다릅니다.
VCam 위젯을 생성하는 방법은 다음과 같습니다.
-
콘텐츠 브라우저에서 + 추가(Add) > VCam 을 클릭하고 VCam 위젯(VCam Widget) 에셋을 추가합니다. 위젯 이름을 VCW_ConnectionButton 으로 지정합니다.
입력 매핑 컨텍스트(Input Mapping Context) 에 대한 팝업 창이 표시됩니다. 건너뛰기(Skip) 를 클릭하여 블루프린트 열기를 진행할 수 있습니다.
- VCW_ConnectionButton 블루프린트를 엽니다.
-
라이브러리(Library) 패널을 선택하고 일반(Common) 카테고리에서 버튼(Button) 을 디자이너 그래프에 드래그합니다.
-
계층구조(Hierarchy) 패널에서 버튼의 이름을 'Button'으로 변경합니다.
-
VCam 위젯 블루프린트의 오른쪽 상단에서 그래프(Graph) 를 클릭하여 블루프린트 스크립팅 편집 모드를 엽니다.
- 블루프린트 툴바에서 클래스 디폴트(Class Defaults) 를 선택합니다.
-
디테일(Details) 패널의 VCam 연결(VCam Connection) 카테고리에서 연결(Connection) 을 펼치고 추가(+) 아이콘을 클릭하여 새 엘리먼트를 추가합니다. 엘리먼트 이름을 'Button'으로 지정합니다.
-
Button 연결 엘리먼트의 프로퍼티를 펼치고 다음 프로퍼티를 설정합니다.
- 입력 액션 필요(Requires Input Action) 를 체크해야 합니다.
- 액션 타입(Action Type) 을 Digital (bool) 로 설정합니다.
- 컴파일 및 저장 합니다.
이제 버튼 위젯이 있는 VCW_ConnectionButton 이라는 VCam 위젯이 생겼습니다.
VCam 위젯 블루프린트 로직 생성하기
이전 섹션에서 VCam 위젯 버튼을 구성했으니 VCam 위젯 블루프린트에 스크립팅된 로직을 추가하여 버튼 위젯이 모디파이어 블루프린트인 VCM_LookAt과 상호작용하는 방식을 제어할 수 있습니다.
VCam 위젯의 블루프린트 로직을 추가하는 방법은 다음과 같습니다.
- 그래프 모드에서 내 블루프린트(My Blueprint) > 변수(Variables) 로 이동하여 Button 변수를 선택합니다.
-
디테일(Details) 패널에서 이벤트(Events) 카테고리를 펼치고 클릭 시(On Clicked) 옆의 추가(+) 버튼을 클릭하여 그래프에 추가합니다.
- 이벤트 그래프를 우클릭하고 VCam 연결(VCam Connections) 카테고리에서 Get Connections 변수를 추가합니다.
- Get Connections 변수를 드래그하여 Find 노드를 추가합니다. 키 이름(Key Name) 텍스트 필드에 앞서 생성한 연결 이름과 같은 'Button'을 입력합니다.
- Find 노드의 블루 핀(출력 핀)을 드래그하여 Get Connected Modifier 노드를 추가합니다.
- Get Connected Modifier 노드의 Return Value 를 드래그하여 Get Owning VCam Component 노드를 추가합니다.
- Get Owning VCam Component 노드의 Return Value 를 드래그하여 Inject Input for Action 노드를 추가합니다.
- Inject Input for Action 노드에서 다음과 같은 작업을 수행합니다.
- Raw Value 입력을 우클릭하고 구조체 핀 분할(Split Struct Pin) 을 선택하여 X, Y 및 Z 값에 대한 개별 입력을 표시합니다.
- Raw Value X 를 1 로 설정합니다. 이렇게 하면 버튼이 눌렸을 때 입력 액션이 하드웨어 버튼의 누르기를 모방하는 True 와 일치하는 값을 수신합니다.
- Raw Value Type 의 드롭다운에서 Digital (bool) 을 선택합니다.
- Find 노드의 블루 핀을 드래그하여 Get Connected Input Action 노드를 추가합니다.
- Get Connected Input Action 노드의 Return Value 를 드래그하여 Inject Input for Action 노드의 Action 입력에 연결합니다.
- 컴파일 및 저장 합니다.
완성된 VCW_ConnectionButton VCam 위젯 블루프린트 그래프는 아래 이미지와 같은 모습일 것입니다.
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_0" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_VariableGet_0"'
VariableReference=(MemberName="Connections",bSelfContext=True)
NodePosX=240
NodePosY=816
NodeGuid=6816BABF4D1832E57B8C8D94E853EF3A
CustomProperties Pin (PinId=6665757543AA8F032D717AB506E3697B,PinName="Connections",PinFriendlyName=NSLOCTEXT("", "BBE4BDE0420406B4812E148D74E6791F", "Connections"),Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(TerminalCategory="struct",TerminalSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"'),PinType.ContainerType=Map,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_0 CD841974480A3234F06102A9F2C37A90,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9A32C7E64734B8CB07E22282E1159E1F,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamWidget"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_0"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.BlueprintMapLibrary"',MemberName="Map_Find")
NodePosX=400
NodePosY=816
NodeGuid=54A785EF409B4E149CFA40BF1021730A
CustomProperties Pin (PinId=9403039A440948E928EBBA8B85FF0B99,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.BlueprintMapLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__BlueprintMapLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=CD841974480A3234F06102A9F2C37A90,PinName="TargetMap",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(TerminalCategory="struct",TerminalSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"'),PinType.ContainerType=Map,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_0 6665757543AA8F032D717AB506E3697B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=B6C368CF43063A43DC01969090B92969,PinName="Key",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=0674EB8C414CBF6BE64EE583C4C91411,PinName="Value",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_1 5A7B7C3C4D1F9BC0814DB68621177BA6,K2Node_CallFunction_5 6049632247ABC8B992E2F6837E6F2F8A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=81C4532346335506EDA911A43A28964A,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_1" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_1"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',MemberName="GetConnectedModifier_VCamConnection")
NodePosX=640
NodePosY=800
NodeGuid=03F2B4F14577B8303BFF4393E42E9C36
CustomProperties Pin (PinId=10DCF4AB428E0C5BA9192494CF4CD8E7,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/VCamCore.Default__VCamUIFunctionLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5A7B7C3C4D1F9BC0814DB68621177BA6,PinName="Connection",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_0 0674EB8C414CBF6BE64EE583C4C91411,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=DC1439554476C557EFE053B26D47C64B,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 5E3A5B9A49C511F4949A0DB9DE259437,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_2"'
bIsPureFunc=True
bIsConstFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',MemberName="GetOwningVCamComponent")
NodePosX=896
NodePosY=784
NodeGuid=07EB4E2641F873455C86BCBCC382FEF6
CustomProperties Pin (PinId=5E3A5B9A49C511F4949A0DB9DE259437,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_1 DC1439554476C557EFE053B26D47C64B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=1410A3284215DD1C8F70F88B6D08F9AC,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_3 065D015641B7111904E6ABA9B184F0FF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_3" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_3"'
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/VCamCore.VCamComponent"',MemberName="InjectInputForAction")
NodePosX=1200
NodePosY=672
NodeGuid=3CA7E3A74FB6D55CF0311CA706766448
CustomProperties Pin (PinId=473E74084CF3B071289864A65E0B5BBB,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_ComponentBoundEvent_0 F3BA0F304E25E2CC6FEE729980368545,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=E4D8BE204AAB097F6CEC23BD197C29F8,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=065D015641B7111904E6ABA9B184F0FF,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 1410A3284215DD1C8F70F88B6D08F9AC,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=491995FF4AE19F4FCD8F86BD231EAFC2,PinName="Action",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/EnhancedInput.InputAction"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_0 52F14A1F4CD28370A2657F8FD9F64B50,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=1D23409C4F48419CD15330801BB57889,PinName="RawValue",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,SubPins=(K2Node_CallFunction_3 AB503D1F4FAF4EFA06D03CA59BDB2E63,K2Node_CallFunction_3 4CFD161A41A847A24D7AC4ABB5BA0977,K2Node_CallFunction_3 20B2D82246BC6C7925327CA5F033EC45,K2Node_CallFunction_3 9466186E4DF73D9C0F365A8999E08A1C,),PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=AB503D1F4FAF4EFA06D03CA59BDB2E63,PinName="RawValue_X",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "B9DDF45245FC46234AEDC88BF9E78A1B", "Raw Value"), "ProtoPinDisplayName", NSLOCTEXT("", "8DBDB37D4358154F839239B6B8D4E0C9", "X")),PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.000000",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_3 1D23409C4F48419CD15330801BB57889,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=4CFD161A41A847A24D7AC4ABB5BA0977,PinName="RawValue_Y",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "1747BE2243B925085EA14482781B2689", "Raw Value"), "ProtoPinDisplayName", NSLOCTEXT("", "258A4EBF4041BA9A762304BA77159A10", "Y")),PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_3 1D23409C4F48419CD15330801BB57889,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=20B2D82246BC6C7925327CA5F033EC45,PinName="RawValue_Z",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "CEC12D0E45B31E123711DDB0D83C7C2A", "Raw Value"), "ProtoPinDisplayName", NSLOCTEXT("", "F08123A042E3AEFBA216C48368958781", "Z")),PinType.PinCategory="real",PinType.PinSubCategory="double",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_3 1D23409C4F48419CD15330801BB57889,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9466186E4DF73D9C0F365A8999E08A1C,PinName="RawValue_ValueType",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "F601CFA243F306F602D76FA23AE3B5EE", "Raw Value"), "ProtoPinDisplayName", NSLOCTEXT("", "AEEA947D4CCC24C94F83178342694648", "Value Type")),PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/EnhancedInput.EInputActionValueType"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Boolean",ParentPin=K2Node_CallFunction_3 1D23409C4F48419CD15330801BB57889,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=A8CA3BB3404C67CFE67ACCB386DE71C6,PinName="Modifiers",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/EnhancedInput.InputModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5202738E4817A5A0BD7379BD2CEEEFE9,PinName="Triggers",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/EnhancedInput.InputTrigger"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_5" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_5"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',MemberName="GetConnectedInputAction_VCamConnection")
NodePosX=656
NodePosY=896
NodeGuid=F9519C8F4BBB59594A89D79C0DDB1E9B
CustomProperties Pin (PinId=C7DA6746416F61B9F214C0953D9BDE1E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/VCamCore.Default__VCamUIFunctionLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=6049632247ABC8B992E2F6837E6F2F8A,PinName="Connection",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_0 0674EB8C414CBF6BE64EE583C4C91411,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=0BB4A7074889FB8B9A8D0B9B0A3B6F50,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/EnhancedInput.InputAction"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_0 E2F1939F479DF2FAAE21A485897ED4B1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_0" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_Knot_0"'
NodePosX=1104
NodePosY=928
NodeGuid=A067B247408BB9A8704CC188B2A11C26
CustomProperties Pin (PinId=E2F1939F479DF2FAAE21A485897ED4B1,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/EnhancedInput.InputAction"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_5 0BB4A7074889FB8B9A8D0B9B0A3B6F50,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=52F14A1F4CD28370A2657F8FD9F64B50,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/EnhancedInput.InputAction"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_3 491995FF4AE19F4FCD8F86BD231EAFC2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
위의 블루프린트 코드를 복사하고 VCM_LookAt 모디파이어에 직접 붙여 넣어 자신의 프로젝트에서 위의 그래프를 다시 생성해 보세요.
연결을 관리할 HUD 생성하기
이 섹션에서는 이전 섹션에서 생성한 버튼 VCam 위젯을 사용하는 새로운 VCam 위젯을 생성합니다. 이 위젯은 이 가이드 앞부분에서 생성한 모디파이어 블루프린트에서 구성한 버추얼 카메라의 오브젝트 트래킹 행동 토글 스테이트를 설정하는 클릭에이블 버튼을 표시하는 데 사용됩니다.
HUD 생성 방법은 다음과 같습니다.
-
콘텐츠 브라우저에서 + 추가(Add) > VCam 을 클릭하고 VCam 위젯(VCam Widget) 에셋을 추가합니다. 위젯 이름을 VCW_ConnectionHUD 로 지정합니다.
입력 매핑 컨텍스트(Input Mapping Context) 에 대한 팝업 창이 표시됩니다. 건너뛰기(Skip) 를 클릭하여 블루프린트 열기를 진행할 수 있습니다.
- VCW_ConnectionHUD 를 엽니다.
-
라이브러리(Library) 패널의 검색창 에 'VCW_ConnectionButton'을 입력합니다. VCam 위젯 생성하기 섹션에서 생성한 것과 같은 이름의 VCam 위젯이 보일 것입니다.
- 라이브러리(Library) 패널에서 계층구조(Hierarchy) 패널로 VCW_ConnectionButton 을 드래그합니다.
-
계층구조(Hierarchy) 패널에서 VCW_ConnectionButton 위젯을 우클릭하고 다음으로 래핑...(Wrap With)... 으로 이동한 다음 세부 목록에서 캔버스 패널(Canvas Panel) 을 추가합니다.
캔버스 패널로 래핑은 HUD가 화면 전체를 차지하는 버튼이 되지 않도록 하는 데 사용됩니다.
-
디테일(Details) 패널의 VCam 연결(VCam Connections) 카테고리에서 연결 포인트(Connection Points) > 버튼(Button) 을 펼칩니다.
-
수동 연결 환경설정(Manually Configure Connection) 옆의 체크박스에 체크합니다. 연결 타깃 세팅(Connection Target Settings) 이라는 펼칠 수 있는 새 카테고리가 나타납니다.
-
연결 타깃 세팅 을 펼쳐 다음과 같이 설정합니다.
- 타깃 모디파이어 이름(Target Modifier Name) 을 'LookAt'으로 설정합니다.
- 타깃 연결 포인트(Target Connection Point) 를 'ToggleActivation'으로 설정합니다.
- 컴파일 및 저장 합니다.
이제 HUD에서 스테이트 설정 로직이 있는 버튼 VCam 위젯을 표시할 수 있는 VCam 위젯 블루프린트가 생겼을 것입니다.
기본적으로, 버튼을 추가하고 캔버스 패널로 래핑하면 화면의 맨 왼쪽 상단 구석에 배치됩니다. VCam 위젯의 디자이너에서 이 버튼을 클릭하고 캔버스의 다른 부분으로 드래그하여 화면의 다른 부분에 버튼을 표시할 수도 있습니다. 또한, 이 버튼의 기능을 더 명확하게 하고 싶다면 계층구조 패널에서 버튼에 텍스트를 추가할 수도 있습니다.
VCam 컴포넌트에 HUD 블루프린트 설정하기
HUD VCam 위젯 블루프린트가 구성되었으니, 다음 단계는 이 블루프린트를 VCam 컴포넌트에 적용하여 화면에 출력 제공자의 엘리먼트로 표시되도록 하는 것입니다.
VCam 컴포넌트에 HUD VCam 위젯을 적용하는 방법은 다음과 같습니다.
- 레벨에서 버추얼 카메라 액터(Virtual Camera Actor) 를 선택합니다.
- 디테일(Details) 패널의 컴포넌트 계층구조에서 VCam 컴포넌트(VCam Component) 를 선택합니다.
-
디테일(Details) 패널의 출력 제공자(Output Provider) 섹션에서, 출력 제공자의 초기 구성 섹션에서 생성한 출력 제공자 엘리먼트를 사용하거나 새 엘리먼트를 추가합니다.
이 데모에서는 픽셀 스트리밍 출력 제공자를 사용합니다.
-
출력 제공자(Output Provider) 엘리먼트를 펼쳐 다음과 같이 설정합니다.
- UMG 오버레이(UMG Overlay) 의 드롭다운 목록을 사용하여 VCW_ConnectionHUD VCam 위젯을 할당합니다.
- 활성 여부(Is Active) 옆에 있는 체크박스에 체크합니다.
이미 체크되어 있다면, 체크 해제한 다음 다시 체크하여 수동으로 출력 제공자를 새로 고칩니다.
VCam 액터에 HUD를 할당하고 나면, 뷰포트에서 버튼을 클릭하여 오브젝트 트래킹을 켜고 끌 수 있습니다. 이 예시에서 스피어는 InterpToMovement 로 구성되어 시뮬레이션 모드나 에디터에서 플레이 모드 사용 시 앞뒤로 움직입니다. 이를 통해 버추얼 카메라의 오브젝트 트래킹을 껐다가 다시 켤 때 테스트가 더 쉬워집니다.
연결 및 블루프린트 인터페이스를 통한 버추얼 카메라 커스터마이제이션
이 섹션은 선택 사항입니다.
이 섹션에서는 모디파이어의 스테이트에 따라 버튼 색이 변하도록 연결 및 블루프린트 인터페이스를 사용하여 버추얼 카메라 HUD를 추가로 커스터마이징하는 방법을 보여줍니다. 이러한 커스터마이징은 이 가이드 앞부분에서 생성한 VCW_ConnectionButton 같은 단일 버튼 VCam 위젯을 다른 용도로 재사용하려는 기능에 유용합니다.
블루프린트 인터페이스 에셋 생성하기
이 섹션에서는 모디파이어 블루프린트에 연결하는 데 사용되는 블루프린트 인터페이스를 생성합니다.
블루프린트 인터페이스 생성 방법은 다음과 같습니다.
- 콘텐츠 브라우저에서 + 추가(Add) > 블루프린트(Blueprint) 를 클릭하고 블루프린트 인터페이스(Blueprint Interface) 에셋을 추가합니다. 인터페이스 이름을 BPI_ConnectionButton 으로 지정합니다.
- BPI_ConnectionButton 을 엽니다.
-
내 블루프린트(My Blueprint) 패널의 함수(Functions) 카테고리에서 NewFunction 의 이름을 'GetButtonColor'로 변경합니다.
-
디테일(Details) 패널의 입력(Inputs) 카테고리에서 추가(+) 아이콘을 클릭하여 새 파라미터를 추가합니다. 파라미터 타입을 이름(Name) 으로 지정하고 이름을 'ConnectionPoint'로 지정합니다.
-
출력(Outputs) 카테고리에서 추가(+) 아이콘을 클릭하여 다음 두 개의 파라미터를 추가합니다.
- 첫 번째 파라미터 이름을 '컬러(Color)'로 지정하고 타입 을 선형 컬러(Linear Color) 로 설정합니다.
- 두 번째 파라미터 이름을 '성공(Success)'으로 지정하고 타입 을 부울(Boolean) 로 설정합니다.
- 블루프린트를 컴파일 및 저장 합니다.
모디파이어 블루프린트를 인터페이스 블루프린트에 연결하기
이 섹션에서는 이전 섹션에서 생성한 BPI_ConnectionButton 블루프린트 인터페이스에 VCM_LookAt 모디파이어 블루프린트를 연결하도록 구성합니다.
블루프린트 인터페이스에 연결하도록 구성하는 방법은 다음과 같습니다.
- 콘텐츠 브라우저에서 이 페이지의 모디파이어 블루프린트 생성하기 섹션에서 생성한 VCM_LookAt 모디파이어 블루프린트를 엽니다.
- 블루프린트 툴바에서 클래스 세팅(Class Settings) 을 선택합니다.
-
디테일(Details) 패널의 인터페이스(Interfaces) 카테고리에서 구현된 인터페이스(Implemented Interfaces)의 드롭다운 목록을 사용하여 BPI_ConnectionButton 블루프린트 인터페이스를 선택합니다.
- 컴파일 및 저장 합니다.
인터페이스 블루프린트 로직 구성하기
VCam 모디파이어로 구현된 블루프린트 인터페이스 연결을 통해 VCM_LookAt 모디파이어 블루프린트에 로직을 추가해 버튼이 켜지고 꺼질 때 전송할 색을 정의할 수 있습니다.
버튼을 연결하는 방법은 다음과 같습니다.
-
VCM_LookAt 블루프린트에서 내 블루프린트(My Blueprint) 패널로 이동합니다. 인터페이스(Interfaces) 카테고리에서 Get Button Color 를 더블클릭하여 자체 그래프 탭을 엽니다.
- Get Button Color 그래프에서 Connection Point 핀을 드래그하여 Switch on Connection Points 노드를 추가합니다.
- ALT 를 누른 상태로 Get Button Color 노드와 Return Node 사이의 선을 좌클릭 하여 선을 끊습니다.
- Get Button Color 노드를 드래그하여 Switch on Connection Points 노드에 연결합니다.
- Switch on Connection Points 노드의 Default 실행 핀을 드래그하여 Return Node 에 연결합니다. 다음 단계에 방해가 되지 않도록 Return Node를 아래쪽으로 이동합니다.
- Switch on Connection Points 노드의 Toggle Activation 실행 핀을 드래그하여 Return Node 를 추가합니다.
- Return Node 의 Success 옆 체크박스에 체크합니다.
- 내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리에서 ShouldLookAt 변수를 그래프에 드래그하고 목록에서 Get ShouldLookAt 을 선택합니다.
- Get ShouldLookAt 노드를 드래그하여 Select Color 노드를 추가합니다.
- Select Color 노드의 Return Value 출력 핀을 드래그하여 Switch on Connection Points 노드의 Toggle Activation 실행에서 나온 Return Node 의 Color 핀에 연결합니다.
-
Set Color 노드에서 A 및 B 옆의 박스를 클릭하여 색 선택 툴을 열고 각각의 색을 설정합니다.
- 컴파일 및 저장 합니다.
Get Button Color 그래프는 다음과 같은 모습일 것입니다.
Begin Object Class=/Script/BlueprintGraph.K2Node_FunctionEntry Name="K2Node_FunctionEntry_1" ExportPath="/Script/BlueprintGraph.K2Node_FunctionEntry'/Game/NewBlueprint.NewBlueprint:GetButtonColor.K2Node_FunctionEntry_1'"
ExtraFlags=201457664
FunctionReference=(MemberName="GetButtonColor")
bIsEditable=True
NodePosX=-16
NodePosY=-16
NodeGuid=26CF79447A4EEC8BBFB83F9435B24545
CustomProperties Pin (PinId=92DAE84A13453094DD283D8F8ADD1E94,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(VCamK2Node_SwitchOnModifierConnectionPoints_0 B1B47A244E4FDAB35D2576AAF1370A82,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=59E716980E406D2BC8AFE5BFC2B8AF6C,PinName="Connection Point",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(VCamK2Node_SwitchOnModifierConnectionPoints_0 0DDAC9D03946E21CB02112B8318A674F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties UserDefinedPin (PinName="Connection Point",PinType=(PinCategory="name"),DesiredPinDirection=EGPD_Output)
End Object
Begin Object Class=/Script/VCamBlueprintNodes.VCamK2Node_SwitchOnModifierConnectionPoints Name="VCamK2Node_SwitchOnModifierConnectionPoints_0" ExportPath="/Script/VCamBlueprintNodes.VCamK2Node_SwitchOnModifierConnectionPoints'/Game/NewBlueprint.NewBlueprint:GetButtonColor.VCamK2Node_SwitchOnModifierConnectionPoints_0'"
NodePosX=336
NodePosY=-16
NodeGuid=E585160BF547C2601CC9829F6AAB55A5
CustomProperties Pin (PinId=FBF2C367B548BC2F7226C4B84E58BD82,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_FunctionResult_0 F74FB07840444CBD6B886DAA56DB1D14,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=B1B47A244E4FDAB35D2576AAF1370A82,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_FunctionEntry_1 92DAE84A13453094DD283D8F8ADD1E94,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=0DDAC9D03946E21CB02112B8318A674F,PinName="Selection",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",LinkedTo=(K2Node_FunctionEntry_1 59E716980E406D2BC8AFE5BFC2B8AF6C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=65151DD07E4F2E56CD2A88948B199424,PinName="NotEqual_NameName",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Engine.KismetMathLibrary'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C7A8794A9A412965665FDA848AD9CD5E,PinName="Toggle Activation",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_FunctionResult_1 F74FB07840444CBD6B886DAA56DB1D14,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_FunctionResult Name="K2Node_FunctionResult_1" ExportPath="/Script/BlueprintGraph.K2Node_FunctionResult'/Game/NewBlueprint.NewBlueprint:GetButtonColor.K2Node_FunctionResult_1'"
FunctionReference=(MemberName="GetButtonColor")
bIsEditable=True
NodePosX=960
NodePosY=-16
NodeGuid=111BAFC79040378A326432B3121515B1
CustomProperties Pin (PinId=F74FB07840444CBD6B886DAA56DB1D14,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(VCamK2Node_SwitchOnModifierConnectionPoints_0 C7A8794A9A412965665FDA848AD9CD5E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=8C3DD6229B443F6626838E8BA6A6B470,PinName="Color",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.LinearColor'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_0 E0FD08BE9D413F3877B223BE63C7BD50,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=340AF24CA0425436F95BA989F5DD1B7C,PinName="Success",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties UserDefinedPin (PinName="Color",PinType=(PinCategory="struct",PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.LinearColor'"),DesiredPinDirection=EGPD_Input)
CustomProperties UserDefinedPin (PinName="Success",PinType=(PinCategory="bool"),DesiredPinDirection=EGPD_Input,PinDefaultValue="true")
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_0" ExportPath="/Script/BlueprintGraph.K2Node_VariableGet'/Game/NewBlueprint.NewBlueprint:GetButtonColor.K2Node_VariableGet_0'"
VariableReference=(MemberName="Shoul Look At",MemberGuid=4646A2881B4EA38DF2F60297A332BD95,bSelfContext=True)
NodePosX=496
NodePosY=192
NodeGuid=E8783A803F4A809ABDEBC2A9EAE24853
CustomProperties Pin (PinId=6EBD905FD146E5703C43D8A57E27214C,PinName="Shoul Look At",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",LinkedTo=(K2Node_CallFunction_0 C1D7E01646446472828843B25221B62C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=612C39AE224F2B4BEF8E029BF231068C,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/Engine.BlueprintGeneratedClass'/Game/NewBlueprint.NewBlueprint_C'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Game/NewBlueprint.NewBlueprint:GetButtonColor.K2Node_CallFunction_0'"
bIsPureFunc=True
FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.KismetMathLibrary'",MemberName="SelectColor")
NodePosX=656
NodePosY=96
NodeGuid=B626F22F6F46A547D60F11814E1B5BA8
CustomProperties Pin (PinId=00F6C0C8B84FE441CE70D7B0D12F64E0,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Engine.KismetMathLibrary'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=E66702D41F4E148AC73D1FB2968DCA42,PinName="A",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.LinearColor'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=E0CFF17913472AC0CC0CB38887DF3CFA,PinName="B",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.LinearColor'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=0.000000,G=0.000000,B=1.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C1D7E01646446472828843B25221B62C,PinName="bPickA",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",LinkedTo=(K2Node_VariableGet_0 6EBD905FD146E5703C43D8A57E27214C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=E0FD08BE9D413F3877B223BE63C7BD50,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.LinearColor'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_FunctionResult_1 8C3DD6229B443F6626838E8BA6A6B470,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_FunctionResult Name="K2Node_FunctionResult_0" ExportPath="/Script/BlueprintGraph.K2Node_FunctionResult'/Game/NewBlueprint.NewBlueprint:GetButtonColor.K2Node_FunctionResult_0'"
FunctionReference=(MemberName="GetButtonColor")
bIsEditable=True
NodePosX=960
NodePosY=224
NodeGuid=4FB1A3892743575C9DDF8C97C6136D7C
CustomProperties Pin (PinId=F74FB07840444CBD6B886DAA56DB1D14,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(VCamK2Node_SwitchOnModifierConnectionPoints_0 FBF2C367B548BC2F7226C4B84E58BD82,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=8C3DD6229B443F6626838E8BA6A6B470,PinName="Color",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.LinearColor'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=340AF24CA0425436F95BA989F5DD1B7C,PinName="Success",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties UserDefinedPin (PinName="Color",PinType=(PinCategory="struct",PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.LinearColor'"),DesiredPinDirection=EGPD_Input)
CustomProperties UserDefinedPin (PinName="Success",PinType=(PinCategory="bool"),DesiredPinDirection=EGPD_Input,PinDefaultValue="false")
End Object
위의 블루프린트 코드를 복사하고 VCM_LookAt 모디파이어에 직접 붙여 넣어 자신의 프로젝트에서 위의 그래프를 다시 생성해 보세요.
모디파이어 블루프린트 로직 구성하기
이 섹션에서는 위젯이 이전 섹션에서 환경설정한 정보를 요청하고 파싱하고 적용하는 방법을 구성합니다.
이러한 규칙을 정의하는 방법은 다음과 같습니다.
- 이 페이지의 VCam 위젯 및 초기 구성 생성하기 섹션에서 생성한 VCW_ConnectionButton VCam 위젯을 엽니다.
-
그래프(Graph) 버튼을 클릭하여 그래프 편집 모드로 전환합니다.
- 블루프린트 툴바에서 클래스 디폴트(Class Defaults) 를 클릭합니다.
- 디테일(Details) 패널의 VCam 연결(VCam Connections) 카테고리에서 연결(Connections) 을 펼친 다음 버튼(Button) 을 펼칩니다.
-
필수 인터페이스(Required Interfaces) 옆의 추가(+) 아이콘을 클릭하고 목록에서 BPI_ConnectionButton 블루프린트 인터페이스를 선택합니다.
이 VCam 위젯 블루프린트에 블루프린트 인터페이스를 할당할 때 필수 인터페이스(Required Interfaces) 또는 선택적 인터페이스(Optional Interfaces) 를 선택할 수 있습니다. 필수 인터페이스에 할당하면, 모디파이어 블루프린트가 블루프린트 인터페이스를 구현해야만 연결에 성공합니다. 선택적 인터페이스를 선택하면, 모디파이어 블루프린트가 블루프린트 인터페이스를 구현했는지 여부와 상관없이 연결에 성공할 수 있습니다.
- 이벤트 그래프를 우클릭하고 VCam 연결(VCam Connections) 카테고리에서 Get Connections 변수를 추가합니다.
- Get Connections 노드를 드래그하여 Find 노드를 추가합니다.
- Find 노드의 블루 핀을 드래그하여 Get Connected Modifier 노드를 추가합니다.
- Get Connected Modifier 노드의 Return Value 를 드래그하여 Is Valid 노드를 추가합니다.
- Get Connected Modifier 노드의 Return Value 를 드래그하여 Get Button Color (Message) 노드를 추가합니다.
- Find 노드의 블루 핀을 드래그하여 Get Connection Point Name 노드를 추가합니다.
- Get Connected Point Name 노드의 Return Value 를 드래그하여 Get Button Color 노드의 Connection Point 입력에 연결합니다.
- Event Tick 노드를 드래그하여 Is Valid 노드의 Exec 입력에 연결합니다.
- Is Valid 노드의 Is Valid 실행 핀을 드래그하여 Get Button Color 노드에 연결합니다.
- Get Button Color 실행 핀을 드래그하여 Branch 노드를 추가합니다.
- Get Button Color 노드의 Success 핀을 드래그하여 Branch 노드의 Condition 핀에 연결합니다.
- 내 블루프린트(My Blueprint) 패널의 변수(Variables) 카테고리에서 Button 변수를 그래프에 드래그하고 목록에서 Get Button 을 선택합니다.
- Button 노드를 드래그하여 Set Background Color 노드를 추가합니다.
- Branch 노드의 True 핀을 드래그하여 Set Background Color 노드의 입력에 연결합니다.
- Get Button Color 노드의 Color 핀을 드래그하여 Set Background Color 노드의 In Background Color 핀에 연결합니다.
- 컴파일 및 저장 합니다.
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_0" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_VariableGet_0"'
VariableReference=(MemberName="Connections",bSelfContext=True)
NodePosX=160
NodePosY=1312
NodeGuid=7B71DF2B4BDA58669EB51FAC3109ADC1
CustomProperties Pin (PinId=B4A2F0FD434ACB31305EF9BAB9A1F416,PinName="Connections",PinFriendlyName=NSLOCTEXT("", "6DA68F8F463AD2F15AC82D917EB07810", "Connections"),Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(TerminalCategory="struct",TerminalSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"'),PinType.ContainerType=Map,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_1 458CBF2B44C1A0F7078ED6A8BA3AE5E0,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=AB9F419A49FF0EDD061D58B0DDB4E304,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamWidget"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_1" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_1"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.BlueprintMapLibrary"',MemberName="Map_Find")
NodePosX=320
NodePosY=1312
NodeGuid=D7D8DA554B93C48CF40F4C96D4DDC9B2
CustomProperties Pin (PinId=42109F06439B767E7FD41195E8576008,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n블루프린트 맵 라이브러리 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.BlueprintMapLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__BlueprintMapLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=458CBF2B44C1A0F7078ED6A8BA3AE5E0,PinName="TargetMap",PinToolTip="타깃 맵\nVCam 연결 구조체에 대한 이름 맵\n\n조회를 수행할 맵입니다.",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(TerminalCategory="struct",TerminalSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"'),PinType.ContainerType=Map,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_0 B4A2F0FD434ACB31305EF9BAB9A1F416,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=DEC16E5842A856284322CB9C099103EB,PinName="Key",PinToolTip="키\n이름(레퍼런스로)\n\n값을 찾아볼 때 사용할 키입니다.",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Button",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=305871E9448ECE4A0F4664B10CC8B3DE,PinName="Value",PinToolTip="값\nVCam 연결 구조체\n\n키와 연관된 값이며, 키를 찾을 수 없는 경우 디폴트로 구성됩니다.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 2C24D0BA4FEA5447DCC888AF4F9BA2F4,K2Node_CallFunction_4 6A7D78114620AEDFFF3D249D3DF3EFB0,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=948BD14D4BECFA2568C2AB8A705AE6E0,PinName="ReturnValue",PinToolTip="반환 값\n부울\n\n아이템이 있으면 True를 반환합니다. False는 제공된 키를 사용하는 아이템이 맵에 없음을 의미합니다.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_2"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',MemberName="GetConnectedModifier_VCamConnection")
NodePosX=624
NodePosY=1280
NodeGuid=A520C4B548860B66478E1CB93390E0C2
CustomProperties Pin (PinId=C3935D4848C299302AC932AB3D02E03C,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\nVCam UIFunction 라이브러리 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/VCamCore.Default__VCamUIFunctionLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=2C24D0BA4FEA5447DCC888AF4F9BA2F4,PinName="Connection",PinToolTip="연결\nVCam 연결 구조체(레퍼런스로)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_1 305871E9448ECE4A0F4664B10CC8B3DE,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C14F1DD94B6762807DEEEAA2DCD5D725,PinName="ReturnValue",PinToolTip="반환 값\nVCam 모디파이어 오브젝트 레퍼런스\n\n 주어진 VCam 연결에 대한 연결된 모디파이어를 가져옵니다.\n IsConnected()가 true이면 반환된 모디파이어의 유효성이 보장됩니다.",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_0 F2C833534BF96BA96EDABA9F092238BD,K2Node_Knot_3 1F0A8E1A42C7387E940949B66B016187,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_0" ExportPath=/Script/BlueprintGraph.K2Node_MacroInstance'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_MacroInstance_0"'
MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:IsValid"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=64422BCD430703FF5CAEA8B79A32AA65)
NodePosX=928
NodePosY=1216
NodeGuid=E9A50DFB4FD468FCCD440897079F335C
CustomProperties Pin (PinId=210F92B94F5BAA1F9DB42B80A823DB3C,PinName="exec",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Event_2 6F623B8A45BF7E5451ED599E561311F7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=F2C833534BF96BA96EDABA9F092238BD,PinName="InputObject",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 C14F1DD94B6762807DEEEAA2DCD5D725,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=579DC6854D6CAB3EAF85B6B785FA971D,PinName="Is Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_0 57C3E29E4BFE7106987F068E5E1F32DE,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=8CBDCF55409029EB9B56438758EE16DB,PinName="Is Not Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Message Name="K2Node_Message_0" ExportPath=/Script/BlueprintGraph.K2Node_Message'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_Message_0"'
bIsInterfaceCall=True
FunctionReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Game/VCamComponentSetup/BPI_ConnectionButton.BPI_ConnectionButton_C"',MemberName="GetButtonColor",MemberGuid=4F3D5F6E4FCE96FD90A6139881563900)
NodePosX=1216
NodePosY=1200
NodeGuid=72A3A351459A7326876EF79777D9E375
CustomProperties Pin (PinId=57C3E29E4BFE7106987F068E5E1F32DE,PinName="execute",PinToolTip="\n실행",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_0 579DC6854D6CAB3EAF85B6B785FA971D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=17DFD49A4ECA99FA35E4C296BFA74B1F,PinName="then",PinToolTip="\n실행",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_0 51EF46D441B54F04CCB9AB83C7F2FAB7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=846437454E5782F01C33EF84922BE61F,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_4 B63ED06E45BAC353F775ACBF5F0FD275,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=53868EE64F450C9F71E72BAADFB3D6AD,PinName="ConnectionPoint",PinToolTip="연결 포인트\n이름",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",LinkedTo=(K2Node_Knot_5 D1B4045649E13A0A6AB829B1C4782053,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=21EB0196490FECAC06BD3B96AB1C4A34,PinName="Color",PinToolTip="컬러\n선형 컬러 구조체",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_0 DC3ED1EE4ECDBAC891DFB692045895C1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=6B9B55644276D84F2F69EFB4B4DADD0F,PinName="Success",PinToolTip="성공\n부울",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",AutogeneratedDefaultValue="false",LinkedTo=(K2Node_IfThenElse_0 388EC7F94E2216FAF4C0C29297F3A3BB,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_4" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_4"'
bIsPureFunc=True
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',MemberName="GetConnectionPointName_VCamConnection")
NodePosX=624
NodePosY=1376
NodeGuid=ED65A93D4CE08AB32A1213A34354C2D8
CustomProperties Pin (PinId=BAC94B304846341AD150F8A970FE4CB4,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\nVCam UIFunction 라이브러리 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamUIFunctionLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/VCamCore.Default__VCamUIFunctionLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=6A7D78114620AEDFFF3D249D3DF3EFB0,PinName="Connection",PinToolTip="연결\nVCam 연결 구조체(레퍼런스로)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/VCamCore.VCamConnection"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_1 305871E9448ECE4A0F4664B10CC8B3DE,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=4983E9BF4F4B209AA49A43BDC7D0A0DA,PinName="ReturnValue",PinToolTip="반환 값\n이름\n\n 주어진 VCam 연결에 대해 연관된 연결 포인트의 이름을 가져옵니다.\n IsConnected()가 false면 "없음(None)"을 반환합니다.",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",LinkedTo=(K2Node_Knot_5 FE64C76A459B5A66A62604ACF72F644A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_IfThenElse Name="K2Node_IfThenElse_0" ExportPath=/Script/BlueprintGraph.K2Node_IfThenElse'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_IfThenElse_0"'
NodePosX=1552
NodePosY=1216
NodeGuid=A40BCB884171B13B1A4488AAC6FCBEC9
CustomProperties Pin (PinId=51EF46D441B54F04CCB9AB83C7F2FAB7,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_0 17DFD49A4ECA99FA35E4C296BFA74B1F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=388EC7F94E2216FAF4C0C29297F3A3BB,PinName="Condition",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="true",AutogeneratedDefaultValue="true",LinkedTo=(K2Node_Message_0 6B9B55644276D84F2F69EFB4B4DADD0F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=E839B8F640E935B7C1E80CB017239A55,PinName="then",PinFriendlyName=NSLOCTEXT("K2Node", "true", "true"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_5 4BCF53234CF9DDB46E6CCAA3EC1AC50B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=37D3952843E526F23F34448C28AA8124,PinName="else",PinFriendlyName=NSLOCTEXT("K2Node", "false", "false"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_VariableGet Name="K2Node_VariableGet_3" ExportPath=/Script/BlueprintGraph.K2Node_VariableGet'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_VariableGet_3"'
VariableReference=(MemberName="Button",bSelfContext=True)
NodePosX=1584
NodePosY=1344
NodeGuid=02F6194A4A2AE54EB212FAB648204363
CustomProperties Pin (PinId=0EA7D4EB43C1855A41D2E2B5ADA6ABA9,PinName="Button",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/UMG.Button"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_5 B9ABAC97415820E10890B2BD1BDCDF69,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=85E59B5844230407C1BC6CB14D0BC51F,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/UMG.WidgetBlueprintGeneratedClass'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton_C"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_5" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_CallFunction_5"'
FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/UMG.Button"',MemberName="SetBackgroundColor")
NodePosX=1808
NodePosY=1200
NodeGuid=0FFAC8D74957C70FCA96C19DEDC11896
CustomProperties Pin (PinId=4BCF53234CF9DDB46E6CCAA3EC1AC50B,PinName="execute",PinToolTip="\n실행",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_IfThenElse_0 E839B8F640E935B7C1E80CB017239A55,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9D63DB434E2C6FB91A2318B7CD0BD762,PinName="then",PinToolTip="\n실행",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=B9ABAC97415820E10890B2BD1BDCDF69,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="타깃\n버튼 오브젝트 레퍼런스",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/UMG.Button"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_VariableGet_3 0EA7D4EB43C1855A41D2E2B5ADA6ABA9,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=F428AC284CFA1B0980121E9FFF5F749F,PinName="InBackgroundColor",PinToolTip="배경색에서\n선형 컬러 구조체",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_2 0FA03B924C67403A861B7F8D792F9AE6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_0" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_Knot_0"'
NodePosX=1536
NodePosY=1392
NodeGuid=077CF3464A31EBC27C1DFEA85B14E05B
CustomProperties Pin (PinId=DC3ED1EE4ECDBAC891DFB692045895C1,PinName="InputPin",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_0 21EB0196490FECAC06BD3B96AB1C4A34,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9E10D7D3475E8C00AD2E2898751F935E,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_2 0FB610794D6312D224890F974E15A284,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_2" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_Knot_2"'
NodePosX=1728
NodePosY=1392
NodeGuid=46A85F7C4B412DDEB8CADFB79CB362DA
CustomProperties Pin (PinId=0FB610794D6312D224890F974E15A284,PinName="InputPin",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_0 9E10D7D3475E8C00AD2E2898751F935E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=0FA03B924C67403A861B7F8D792F9AE6,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_5 F428AC284CFA1B0980121E9FFF5F749F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_3" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_Knot_3"'
NodePosX=880
NodePosY=1328
NodeGuid=590F4E764D26B3471F39538F5FB686E7
CustomProperties Pin (PinId=1F0A8E1A42C7387E940949B66B016187,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_2 C14F1DD94B6762807DEEEAA2DCD5D725,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=98EC05D8437DE5C2BB6AF2AFCA40666F,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_4 2AD83E904E3427D056D642A3750393CC,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_4" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_Knot_4"'
NodePosX=1136
NodePosY=1328
NodeGuid=E396DB3B41AC71587318ADBA9F8CE145
CustomProperties Pin (PinId=2AD83E904E3427D056D642A3750393CC,PinName="InputPin",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_3 98EC05D8437DE5C2BB6AF2AFCA40666F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=B63ED06E45BAC353F775ACBF5F0FD275,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/VCamCore.VCamModifier"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_0 846437454E5782F01C33EF84922BE61F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_5" ExportPath=/Script/BlueprintGraph.K2Node_Knot'"/Game/VCamComponentSetup/VCW_ConnectionButton.VCW_ConnectionButton:EventGraph.K2Node_Knot_5"'
NodePosX=1136
NodePosY=1408
NodeGuid=F9F9878843B10D94127AFF8E6B47C33C
CustomProperties Pin (PinId=FE64C76A459B5A66A62604ACF72F644A,PinName="InputPin",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_4 4983E9BF4F4B209AA49A43BDC7D0A0DA,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=D1B4045649E13A0A6AB829B1C4782053,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_0 53868EE64F450C9F71E72BAADFB3D6AD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
위의 블루프린트 코드를 복사하고 VCM_LookAt 모디파이어에 직접 붙여 넣어 자신의 프로젝트에서 위의 그래프를 다시 생성해 보세요.
최종 결과
이 가이드를 완료하면, 모디파이어와 연결 포인트, VCam 위젯을 사용하여 뷰포트에서 카메라 트래킹을 켜고 끌 수 있으며 스테이트에 따라 색이 변하는 토글 버튼이 있는 커스텀 버추얼 카메라를 생성할 수 있게 됩니다.