The Virtual Camera (or VCam) Component provides a modular system for editing a Cine Camera component using UMG widgets. The VCam Component is the base component for building a custom virtual camera in Unreal Engine like the VCam Actor. The benefit of building your own VCam is that you can implement custom functionality through Blueprint using Modifiers and Output Providers.
Virtual Camera Architecture
The VCam Component implements three aspects to its architecture: model, view, and controller.
- Modifiers represent the model. These implement the logic for changing properties on the Cine Camera Component. Modifiers contain Connection Points, and they can optionally expose Input Actions (Enhanced Input), which can be invoked by UMG Widgets.
- Output Providers are the views. They create and render widgets (possibly streaming them). Usually, output providers create UVCamWidgets, which are special widgets that can connect to Connection Points of Modifiers. Widgets interact with Modifiers in two ways:
- Simple - Trigger input actions that modifiers are subscribed to and expose via connections.
- Advanced - Queries whether modifiers implement certain custom defined interfaces.
- UVCameraSubSystems exist for as long as UVCamComponent is enabled. This is comparable to LocalPlayerSubSystem.
- One notable such system is the InputVCamSubsystem, which allows UVCamComponents to bind to input devices similarly to how Player Controllers do in shipped games.
Requirements and Prerequisites
To proceed with this guide, you must first have:
- Followed the "Required Setup" sections of the Controlling a Virtual Camera Actor using Live Link.
- Enabling all necessary plugins in your project.
- [Optional] Using a supported iOS device.
- [Optional] Downloading and installing the Live Link VCAM app from the iOS App Store.
- [Optional] A shared network connection for your Unreal Engine project and your iOS device running the Live Link VCAM app.
Some Output Providers require use of an iOS device. For more information on their usage, see the VCam Output Providers section of this page.
Setting up a Custom Virtual Camera Workflow
Virtual Cameras are made up of two components: a Cine Camera and VCam. These two components are the starting foundation of building a working customized virtual camera.
To build a custom virtual camera:
- Add a Cine Camera to the scene using the Place Actors panel in the Level Editor.
- With the Cine Camera selected, go to the Details panel, click the Add (+) component menu, and select a VCam Component from the list.
- Click and drag the VCam Component onto the CameraComponent so that it is a child of the Cine Camera.
Your Virtual Camera will not function if the VCam Component is not a direct child of the CameraComponent.
Your Components hierarchy should look like the example below:
The VCam Component has the following properties:
| Property |
Description |
| Enabled |
This toggle enables and disables the entire VCam Component. |
| Role |
Specifies the type of role to assign to this virtual camera in a virtual production environment. |
| Live Link Subject |
This is the subject used through the Live Link plugin. The component uses the subject`s camera information to drive the camera in the scene from the Live Link-connected device. |
| Viewport Locker |
The viewport that is rendered from the point of view of the virtual camera. |
| Disable Component when Spawned by Sequencer |
Disables the VCam Component when spawned by a Sequence. This prevents a situation where two VCam Components might become active at the same time when playing a Sequence that contains a VCam Component set as spawnable. |
| Input Profile |
Specifies the profile to use that has mapped inputs of the virtual camera. To learn more about Input Profiles, see Controlling Inputs to Virtual Camera Controls. |
| Input Device Settings |
Enable and Disable what can be used as an input device (keyboard, gamepad, and mouse). You can also select the type of logging for inputs. |
| Output Providers |
Contains a list of all output device destinations. For more details, see the Output Providers section of this page. |
| Modifier Context |
An optional object that contains arbitrary data that is shared between all Modifiers. |
| Modifier Stack |
Contains a list of all Modifiers added to the component. For more details, see the Modifiers section of this page. |
| Advanced Settings |
|
| Disable Output on Multi User Receiver |
Disables the output if the virtual camera is in a multi-user session and the camera is the receiver from the session. |
| Update Frequency |
Indicates the frequency at which the camera updates are sent when in multi-user mode. This has a minimum value of 11 milliseconds. Using values below 30 milliseconds is discouraged. When higher refresh rates are needed, consider using Live Link Rebroadcast to stream camera data instead. |
VCam Modifiers
Virtual Camera Modifiers are specialized Blueprint assets. They contain logic and Input Actions to build custom functionality. You can use them to create unique effects and behaviors (in Blueprint or C++), like camera shake, making focus adjustments, and limiting camera movement along an axis.
Virtual cameras can have any number of Modifiers applied to them to create a stack of modifiers that apply different behaviors and effects. Each modifier in the stack is applied and rendered in the order from top to bottom.
Unreal Engine includes a set of default Modifiers that are used with the standard VCam Actor. You can explore each of these Modifiers and their logic. You can find them in the Engine > Plugins > VirtualCamera Content > Modifiers folder.
VCam Output Providers
The Virtual Camera Output Provider system reroutes the output of the Virtual Camera onto various providers, such viewports, and devices using remote session protocols.
The following Output Providers are available to choose from:
To add Output Providers to your Virtual Camera:
- Select the VCam Component of a Virtual Camera.
- In the Details panel, navigate to Output Providers section, and click the Add (+) icon to add a new provider to the stack.
-
Use the dropdown selected next to the added Index [0] element to select one of the Output Providers in the list.
Each Output Provider in the stack applies and renders in order from top to bottom.
Viewport Output Provider
The Viewport Output Provider takes the view of the virtual camera in the scene and outputs it directly to the viewport of the Level Editor.
The Viewport Output Provider includes the following properties:
| Property |
Description |
| Is Active |
If set, this output provider executes every frame. |
| Target Viewport |
Select which viewport to use for this virtual camera. |
| UMG Overlay |
The UMG class to be rendered by this output provider. |
| Use Override Resolution |
Override the default output resolution with a custom value.
For this to take effect, you must toggle Is Active off then back on.
|
| Override Resolution |
Applies a custom resolution when Use Override Resolution is set. |
| Gameplay View Target Policy |
In game worlds, such as Play-in-Editor (PIE) or shipped games, this determines which player controller whose view target should be set to the owning Cine Camera Actor.
Multiple output providers may have a policy set and policies might choose the same player controllers to set the view target for. This conflict is resolved by checking if a player controller already has the Cine Camera Actor as the view target, and if it does, the policy is not used. This means you can order your output providers array in the VCam Component as needed, and the first policies will get higher priority.
|
Pixel Streaming Output Provider
The Pixel Streaming Output Provider outputs the Editor viewport to a remote device connected using WebRTC, which includes the Live Link VCam app used with iOS devices. This method works with any compatible device that can receive streamed data, including web browsers. It is the primary output provider for virtual cameras.
Pixel Streaming is configured on an instance of the Pixel Streaming Output Provider and requires no additional setup. The VCam Component only supports a single stream.
The Pixel Streaming Output Provider includes the following properties:
| Property |
Description |
| Is Active |
If set, this output provider executes every frame. |
| Target Viewport |
Ses which viewport to use for this virtual camera. |
| UMG Overlay |
The UMG class to be rendered by this output provider. |
| Use Override Resolution |
Override the default output resolution with a custom value.
For this to take effect, you must toggle Is Active off then back on.
|
| Override Resolution |
Applies a custom resolution when Use Override Resolution is set. |
| From Composure Output Provider Index |
If you're using the output from a Composure Output Provider, specify it here. |
| Match Remote Resolution |
When enabled, the streamed Unreal Engine viewport matches the resolution of the remote device. |
| Enable ARKit Tracking |
Controls the corresponding Cine Camera Actor with transform data received from the Live Link VCAM app on your iOS device. |
| Prevent Editor Idle |
Prevents the Editor from moving to the background when it is not the foreground application. This can make the editor unresponsive or sluggish when it's minimized or another application is being used. |
| Auto Set Live Link Subject |
When enabled, the Live Link Subject of the owning VCam Component is set to the subject created by this Output Provider.The Provider must also be enabled. |
| Streamer Id |
Set the name of this stream to be reported to the signalling server. If none is supplied, a default is used. We recommend that you give each stream a unique name, since you can run into issues if a streamer ID is the same as another VCam's streamer ID. |
| Gameplay View Target Policy |
In game worlds, such as Play-in-Editor (PIE) or shipped games, this determines which player controller whose view target should be set to the owning Cine Camera Actor.
Multiple output providers may have a policy set and policies might choose the same player controllers to set the view target for. This conflict is resolved by checking if a player controller already has the Cine Camera Actor as the view target, and if it does, the policy is not used. This means you can order your output providers array in the VCam Component as needed, and the first policies will get higher priority.
|
Unreal Remote Output Provider
The Unreal Remote Output Provider outputs the primary viewport to a remote device connected using the Remote Session Protocol, such as the Live link VCAM app on an iOS device.
Unreal Remote requires additional configuration of your project to connect to an external device using a remote session. For more information, see the Set Up an Unreal Remote Output Provider section of this page.
The Unreal Remote Output Provider includes the following properties:
| Property |
Description |
| Is Active |
If enabled, this output provider executes every frame. |
| Target Viewport |
Select which viewport to use for this virtual camera. |
| UMG Overlay |
Select the UMG class to be rendered by this output provider. |
| Use Override Resolution |
Override the default output resolution with a custom value.
For this to take effect, you must toggle Is Active off then back on.
|
| Override Resolution |
Applies a custom resolution when Use Override Resolution is set. |
| Gameplay View Target Policy |
In game worlds, such as Play-in-Editor (PIE) or shipped games, this determines which player controller whose view target should be set to the owning Cine Camera Actor.
Multiple output providers may have a policy set and policies might choose the same player controllers to set the view target for. This conflict is resolved by checking if a player controller already has the Cine Camera Actor as the view target, and if it does, the policy is not used. This means you can order your output providers array in the VCam Component as needed, and the first policies will get higher priority.
|
| Port Number |
Network port number. You should only change this if you're connecting multiple Remote Session devices to the same PC. |
| From Composure Output Provider Index |
If you're using this output from a Composure Output Provider, specify it here. |
The Media Output Provider sends the output of a virtual camera to any device supported by the Unreal Media Framework, such as video capture cards from Black Magic and AJA.
Output Config Assets are used to specify the type of media source being output and its parameters needed to output to the source. For more information about these types of assets, their usage, and which sources are supported, see Media Framework.
The Media Output Provider includes the following properties:
| Property |
Description |
| Is Active |
If set, this output provider executes every frame. |
| Target Viewport |
Select which viewport to use for this virtual camera. |
| UMG Overlay |
The UMG class to be rendered by this output provider. |
| Use Override Resolution |
Override the default output resolution with a custom value.
For this to take effect, you must toggle Is Active off then back on.
|
| Override Resolution |
Applies a custom resolution when Use Override Resolution is set. |
| Gameplay View Target Policy |
In game worlds, such as Play-in-Editor (PIE) or shipped games, this determines which player controller whose view target should be set to the owning Cine Camera Actor.
Multiple output providers may have a policy set and policies might choose the same player controllers to set the view target for. This conflict is resolved by checking if a player controller already has the Cine Camera Actor as the view target, and if it does, the policy is not used. This means you can order your output providers array in the VCam Component as needed, and the first policies will get higher priority.
|
| Output Config |
Assign a Media Output Configuration asset using one of the output sources supported by the Media Framework. |
| From Composure Output Provider Index |
If using this output from a Composure Output Provider, specify it here. |
Composure Output Provider
The Composure Output Provider sends the output of a virtual camera to a Render Target. You can use Render Targets with Composure for compositing. You can use the Layer Targets property to specify a stack of elements to be used for compositing. Those elements support rendering UMG widgets.
The Composure Output Provider includes the following properties:
| Property |
Description |
| Is Active |
If set, this output provider executes every frame. |
| Target Viewport |
Select which viewport to use for this virtual camera. |
| UMG Overlay |
The UMG class to be rendered by this output provider. |
| Use Override Resolution |
Override the default output resolution with a custom value.
For this to take effect, you must toggle Is Active off then back on.
|
| Override Resolution |
Applies a custom resolution when Use Override Resolution is set. |
| Gameplay View Target Policy |
In game worlds, such as Play-in-Editor (PIE) or shipped games, this determines which player controller whose view target should be set to the owning Cine Camera Actor.
Multiple output providers may have a policy set and policies might choose the same player controllers to set the view target for. This conflict is resolved by checking if a player controller already has the Cine Camera Actor as the view target, and if it does, the policy is not used. This means you can order your output providers array in the VCam Component as needed, and the first policies will get higher priority.
|
| Layer Targets |
List of Composure stack Compositing Elements to render the requested UMG into. |
| Final Output Render Target |
Assign a Texture Render Target 2D asset that contains the final output. |
Modifier Connection Points are an experimental feature.
Input Actions are mappable input from a Modifier Blueprint to hardware input. Enhanced Input is developed around the idea of mapping this hardware input to things like Virtual Cameras and remapping UMG inputs through the use of injection and Connection Points. You can use VCam Widgets (similar to UMG Widgets) like those for the Live Link VCAM app to control a Virtual Camera Actor in Unreal Engine. They are remappable to Modifiers without needing hard references or casts. Connection Points bridge elements to remap and reuse VCam Widgets.
Example of Configuring a Custom Virtual Camera
This part of the guide demonstrates the setup and configuration of a custom virtual camera using the VCam Component with a Cine Camera Actor through example. This process uses all of the elements discussed earlier in this page to build out an simplistic example to show how these parts interact and connect to one another.
In this configuration guide, you'll create and apply the following functionality to a custom virtual camera:
- Create a custom virtual camera using Cine Camera and VCam components.
- Setup Blueprints and logic that tracks a specified object in the scene using a virtual camera.
- Expand the Blueprint logic to toggle on and off the virtual camera's ability to track an object.
- Set up a VCam Widget to use the scripted Blueprint logic.
- Further expand the Blueprint logic to change the color of the button depending on its state (on / off).
After following this guide, you should have a clearer understanding of how you can use Modifiers, Output Providers, and Input Actions with Connection Points to build out different effects and behaviors to use with a virtual camera.
Create a Custom Virtual Camera
To build a custom virtual camera:
- Add a Cine Camera Actor to the scene using the Place Actors panel in the Level Editor.
-
With the Cine Camera selected, click the Add (+) component menu in the Details panel and select a VCam Component from the list.
- Click and drag the VCam Component onto the CameraComponent so that it is a child of Cine Camera.
Your Components hierarchy should look like the example below:
Creating a Custom Modifier
In this section, you'll create a Modifier Blueprint. This Blueprint contains the behavior and logic that you can then apply to a virtual camera to create some effect. In this example, the Blueprint you'll create will be used to track a specified object in the scene using a virtual camera.
This part of the guide has been broken up into several smaller steps to build the VCam Modifier and follows this workflow to achieve the result:
Create a Modifier Blueprint
To create a VCam Modifier Blueprint:
-
In the Content Browser, click Add (+) > VCam and add a VCam Modifier Blueprint Asset. Name it VCM_LookAt.
-
A prompt appears with the Select Input Mapping Context pop-up window. You can choose Skip.
See Enhance Input for more details about Input Mapping Assets and their usage.
You have now created a Modifier Blueprint, which you'll use for the rest of this guide.
Set Up Actor Reference Variables
In this step, you'll set up the variables used in the graph of the Modifier Blueprint. These variables specify the object in the level that the virtual camera will track.
When setting up this type of thing, any references to Actors in a scene must be defined in the Modifier Blueprint.
To set up your Modifier with Actor reference variables:
- Open the VCM_LookAt Modifier Blueprint.
-
In the My Blueprint panel, locate the Variables category, and click the Add (+) icon to add a new variable.
- Click the text field for the variable and set its name to "TargetActor".
-
Click the Boolean type, change its type to Object Types > Actor, and select Object Reference.
-
With the TargetActor variable selected in the My Blueprint panel, use the Details panel to check the box for Instance Editable under the Variables category.
Clicking the Eye icon next to the variable name does the same as setting Instance Editable in the Details panel.
The reference variables that you set up in this step are used later, when the Modifier is added to the virtual camera's Modifier stack. Variables that are set to Instance Editable are visible from the VCam Component's properties while working in the level. You directly set which Actor the virtual camera will track here.
Create the Modifier Blueprint Logic
In this step, you'll create some initial logic in the graph of the VCM_LookAt Modifier Blueprint. This logic is used to track an object in the world, using the TargetActor variable, by providing its location to the virtual camera. Unreal Engine uses this information to rotate the virtual camera to keep the object in view.
To add the logic to your Modifier Blueprint:
- Open the VCM_LookAt Modifier Blueprint.
- In the My Blueprint panel, locate the Variables category, click and drag the TargetActor variable into the Event Graph. Choose Get TargetActor.
- Drag off the output pin of the TargetActor node and add an Is Valid node.
- Connect the Event On Apply node to the Is Valid node.
- Drag off the Camera Component output of the Event On Apply node and add a Get World Location node.
- Drag off the Return Value pin of the Get World Location node and add a Find Look at Rotation node.
- Drag off the Camera Component pin of the Event On Apply node and add a Set World Rotation node.
- Connect the Is Valid pin of the Is Valid node to Set World Rotation node.
- Drag off the TargetActor node and add a Get Actor Location node.
- Drag off the Return Value pin of the Get Actor Location node and connect it to the Target pin of the Find Look at Rotation node.
- Drag off the Return Value pin of the Find Look at Rotation node and connect it to the New Rotation pin of the Set World Rotation node.
- Compile and Save.
The setup for your Modifier Blueprint is now complete and your graph should look similar to this:
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="Target\nScene Component Object Reference",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="Return Value\nVector\n\nReturn location of the component, in world space",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="Target\nActor Object Reference",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="Return Value\nVector\n\nReturns the location of the RootComponent of this Actor",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
Copy and paste the Blueprint code above directly into your VCM_LookAt Modifier to recreate the graph above in your own project.
You can use Reroute nodes to clean up the graph, making it easier to follow where wires are going. This is especially helpful when some pins have multiple wires coming from them or going to them. Double-click on any wire to add a reroute node in place. You can select it and drag it around like any other node in the level to reorient the wire.
Add Modifiers to VCam Components Stack
With the Modifier Blueprint completed, you can now apply it to the Modifier Stack of the virtual camera in your scene.
To add a Modifier to a VCam Component:
- In your level, select your created Virtual Camera Actor.
- In the Details panel, select the VCam Component in the hierarchy window.
-
Under the Virtual Camera properties, locate the Modifier Stack, and click the Add (+) icon to add an element to the stack.
-
Expand the properties under the added Modifier Stack element named Index [0], use the Name text field to name this Modifier "LookAt".
-
Use the dropdown list for Generated Modifier to select the VCM_LookAt Modifier Blueprint created earlier in this guide.
- Expand Generated Modifier > Default to show its properties.
-
Use the dropdown selection for Target Actor to select an Actor from your Level for the virtual camera to track.
If you need an Actor to test with, you can use the Shapes Actors available in the Place Actors panel. These are simple shapes, such as a cube, cylinder, sphere, and cone.
You have now set up a Modifier Blueprint that you have assigned to your virtual camera to give it the ability to track that object wherever it moves in the scene.
Modify the Behavior of a Modifier
The VCM_LookAt Modifier Blueprint assigned to your virtual camera tracks the location of a specified object in the Level. In this section, you'll expand the scripted Blueprint behavior to add logic to toggle on and off the ability for the virtual camera to track objects.
To add additional behavior to your Modifier:
- Open the VCM_LookAt Modifier Blueprint.
- In the Event Graph, click and drag the Event On Apply node to the left to make space for additional logic before the Is Valid node.
- On the Event On Apply node, right-click the Camera Component pin, and select Promote to Variable from the list.
- In the My Blueprint panel under the Variables category, select the Camera Component variable.
- In the Details panel, expand the Advanced category, and check the box next to Transient.
- Connect the Event On Apply node to the Set Camera Component node.
- In the My Blueprint panel under the Variables category, click the Add (+) icon to add a Boolean variable. Name it "ShouldLookAt".
- Click and drag the ShouldLookAt variable into the Event Graph, and select Get ShouldLookAt.
- Drag off the ShouldLookAt node and add a Branch node.
- Connect the Set Camera Component node to the Branch node.
- Connect the True execution of the Branch node to the Is Valid node.
- From the My Blueprint panel under the Variables category, drag the Camera Component variable into the graph, and select Get Camera Component.
- Drag off the output pin of the Camera Component node and add a Set World Rotation node.
- Drag off the output pin of the Camera Component node and add a Get World Rotation node.
- Connect the Return Value pin of the Get World Rotation node and connect it to the New Rotation pin on the Set World Rotation node.
- Drag off the False execution of the Branch node and connect it to the Set World Rotation node.
- Compile and Save.
The added logic (highlighted below) uses a Branch node to toggle on and off the ability to track objects with your virtual camera. When the True path is followed, the camera tracks a specified object in the Level. When the False path is used, the camera stops tracking. This expanded logic only sets up what is needed to perform this behavior. The following sections of this guideuse this logic to track the Should Look Atstate using a VCam Widget for a button on screen to toggle this behavior.
Your graph for VCM_LookAt Modifier Blueprint should look similar to this one now:
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="Target\nScene Component Object Reference",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="Return Value\nVector\n\nReturn location of the component, in world space",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="Target\nKismet Math Library Object Reference",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="Start\nVector (by ref)",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="Target\nVector (by ref)",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="Return Value\nRotator\n\nFind a rotation for an object at Start location to point at Target location.",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="Target\nScene Component Object Reference",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="New Rotation\nRotator\n\nNew rotation in world space for the component. ",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="Sweep\nBoolean\n\nWhether we sweep to the destination (currently not supported for rotation). ",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="Sweep Hit Result\nHit Result Structure\n\nHit result from any impact if sweep is 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="Teleport\nBoolean\n\nWhether we teleport the physics state (if physics collision is enabled for this object). If true, physics velocity for this object is unchanged (so ragdoll parts are not affected by change in location). If false, physics velocity is updated based on the change in position (affecting ragdoll parts). If CCD is on and not teleporting, this will affect objects along the entire sweep volume.",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="Target\nActor Object Reference",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="Return Value\nVector\n\nReturns the location of the RootComponent of this Actor",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="Retrieves the value of the variable, can use instead of a separate Get node",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
Copy and paste the Blueprint code above directly into your VCM_LookAt Modifier to recreate the graph above in your own project.
Modifiers for virtual cameras can use Enhanced Input Actions to provide additional control to the VCam operator. In this section of the guide, you'll use these Enhanced Input Actions to control the keypress logic set up in the VCM_LookAt Modifier Blueprint to toggle on and off object tracking for your virtual camera. This means that a stage operator can press a key on their keyboard to use the functionality.
Using Enhanced Input Actions requires two assets: an Input Action and an Input Mapping Context. These assets are used to connect the keys being pressed with the logic set up in the VCM_LookAt Modifier Blueprint.
To create an Input Action and Input Mapping Context:
-
In the Content Browser, click Add (+) > Input and add two items:
- An Input Action and name it IA_ToggleActivation.
- An Input Mapping Context and name it IMC_LookAt.
-
Open the IMC_LookAt Input Mapping Context Asset.
-
In the Details panel, click the Add (+) icon next to Mappings to add a new Input Action element to the array. Expand its properties and select IA_ToggleActivation Input Action created in the first step of this section.
-
Under the IA_ToggleActivation element, use the dropdown next to the Keyboard icon and assign the keypress S as the default key for this Input Action.
- Expand the properties under the keypress assignment, and check the box next to Is Player Mappable.
-
Expand the properties under Player Mappable Options and in the Name text field, call it "IA_ToggleActivation".
For more information on configuring an Input Mapping Context asset, see the Enhanced Input documentation.
In this part of the guide, you'll use the Input Mapping Context that you created in the previous section along with the VCM_LookAt Modifier Blueprint. You'll assign it to VCM_LookAt and set up some additional logic to handle which state the object tracking is in.
To assign an Input Action to a Modifier Blueprint:
- Open the VCM_LookAt Modifier Blueprint previously created in the Create a Modifier Blueprint section of this page.
-
Select Class Defaults from the Blueprint toolbar.
-
In the Details pane, under the VCam Input category, assign your IMC_LookAt Asset to the Input Mapping Context assignment slot.
- Right-click in the Event Graph and search for and add a IA_ToggleActivation node under the Enhanced Action Input. This event is named after the IA_ToggleActivation Input Action you created.
- In the My Blueprint panel under the Variables category, drag a ShouldLookAt variable into the graph and select Get ShouldLookAt from the list.
- Drag off the ShouldLookAt boolean and add a Branch node.
- Drag off the Triggered pin of the Enhanced Action Events IA_ToggleActivation event node and connect it to the Branch node.
- From the My Blueprint panel under the Variables category, drag the ShouldLookAt variable into the graph and select Set ShouldLookAt.
- On the Set ShouldLookAt node, uncheck the box next to the ShouldLookAt boolean. Do this twice so that you have two Set ShouldLookAt nodes.
- Drag off the True pin of the Branch node and connect it to the input of one of the Set ShouldLookAt nodes.
- Drag off the False pin of the Branch node and connect it to the input of the other Set ShouldLookAt node.
-
On the Set ShouldLook node connected to the True path of the Branch node, check the box for the input pin Should Look At.
- Compile and Save.
Having completed these steps, you have assigned the IMC_LookAt Input Mapping Context asset to VCM_LookAt. You have also added additional logic to determine whether the state of the IA_ToggleActivation Input Action is True or False.
Your graph should look like this now:
The new event and logic should look like this:
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="Triggering occurred after one or more processing ticks",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="An event has occurred that has begun Trigger evaluation. Note: Triggered may also occur this frame.",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="Triggering is still being processed",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="Triggering has been canceled",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="The trigger state has transitioned from Triggered to None this frame, i.e. Triggering has finished.\nNOTE: Using this event restricts you to one set of triggers for Started/Completed events. You may prefer two actions, each with its own trigger rules.\nTODO: Completed will not fire if any trigger reports Ongoing on the same frame, but both should fire. e.g. Tick 2 of Hold (= Ongoing) + Pressed (= None) combo will raise Ongoing event only.",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="Input Action\nInput Action Object Reference\n\nThe input action that caused this event to fire",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="Retrieves the value of the variable, can use instead of a separate Get node",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="Retrieves the value of the variable, can use instead of a separate Get node",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
Copy and paste the Blueprint code above directly into your VCM_LookAt Modifier to recreate the graph above in your own project.
Be aware that with this particular setup, the input system executes anytime the 'S' key is pressed, even when the viewport is not in focus. This can cause conflict when someone presses the key for other purposes. For example, if someone renames an asset in the Content Browser that uses the letter 's', the event is executed.
Adding Output Providers to a Virtual Camera
The Output Provider system reroutes output of the VCam Component onto various providers, such as viewports and devices using remote session protocols. You can use multiple output providers for each virtual camera, and each does so in the order in which they are listed in the stack.
In this part of the guide, you'll do the initial setup and choose which type of output provider you'd like to use.
Initial Setup of an Output Provider
To add an Output Provider to a Virtual Camera:
- In the Level, select your Virtual Camera Actor.
-
In the Details pane, locate the Components hierarchy, and select the VCam Component.
-
Locate the Output Providers array, and click the Add (+) icon to add a new element, and select a provider from the Output Providers list. The settings for each type of Output Provider populates under their element when added to the array. Choose between:
-
Check the box next to the Output property Is Active.
Not all Output Providers are set up the same. For information about each and any additional set up that they require to work with a virtual camera, see the sections below.
This guide uses the Pixel Streaming Output Provider as an example, including use of the required iOS Device and Live Link VCam app.
Set Up a Viewport Output Provider
The Viewport Output Provider list of properties looks like this:
To read about the Viewport Output Provider properties, see the Viewport Output Provider section of this page.
This provider takes the current view of a Virtual Camera and outputs it directly to the main viewport of the Level Editor. It can also display UMG widgets on the screen, like the example below. Use the UMG Overlay property to add the widget to the Output Provider. You can use the example asset TestUMG to see a working example displayed on screen.
Set Up a Pixel Streaming Output Provider
This output provider requires a supported iOS device running the Live Link VCAM app.
The Pixel Streaming Output Provider list of properties looks like this:
To read about its properties, see the Pixel Streaming Output Provider section of this page.
With the Pixel Streaming Output Provider set, you can use the Live Link VCAM app on an iOS device on a shared network to connect to the level editor viewport and control the virtual camera. For a full walkthrough of setting up and connecting to the editor from an iOS device, see Controlling Virtual Camera Actors using Live Link.
Set Up an Unreal Remote Output Provider
This output provider requires a supported iOS device running the Live Link VCAM app.
The Unreal Remote Output Provider property list looks like this:
To read about its properties, see the Unreal Remote Output Provider section of this page.
This output provider requires additional setup in Unreal Engine's Project Settings and on the Live Link VCAM app to establish a connection.
Unreal Engine Setup:
- In Unreal Engine, open the Project Settings.
-
Under the Plugins category, navigate to the UDP Message section and set the Unicast Endpoint to your computer's IP address with ":0" at the end to indicate your port number. For example, 10.0.0.0:0 would be the formatting.
-
In the Project Settings under the Engine > Rendering category, navigate to Default Settings, and set the Frame Buffer Pixel Format property to 8bit RGBA using the dropdown selection.
- Restart the editor for these changes to take effect.
iOS Device Setup using the Live Link VCAM app:
- Open the Live Link VCAM app on your iOS device.
- Click the Gear icon in the bottom-right of the screen to open the Settings.
-
Change the Connection Type to Remote Session.
- Enter the IP Address of the computer you want to connect to on the same shared network.
- Press Connect.
The Live Link VCAM app should connect to your Unreal Editor session and mirror the editor viewport on your iOS device's screen.
This Output Provider requires the output to any device be supported by the Unreal Media Framework.
The Media Output Provider list of properties looks like this:
To read about its properties, see the Media Output Provider section of this page.
To set up a Media Output Provider, use the Output Config assignment slot.
For more information on how to use the Unreal Media Framework, see Media Framework.
Set Up a Composure Output Provider
Requires the Composure plugin to be enabled.
The Composure Output Provider list of properties looks like this:
To read about its properties, see the Composure Output Provider section of this page.
You can use the Layer Targets array to add render targets to render the virtual camera's view on. For more information on how to use the Composure plugin and Layer Targets, see Composure Plugin.
Modifier Connection Points is an experimental feature.
In the Using Enhanced Input section of this guide, you created an Input Action (IA_ToggleActivation) that can be passed through Modifiers to other Blueprints, like the VCam Widget Blueprint. You can use Connection Points to pass this input.
In this part of the guide, you'll:
- Add a Connection Point in a Modifier Blueprint.
- Create a VCam Widget with a button and logic.
- Create a HUD to manage the Connection Point.
Add Connection Points to a Modifier
To add Connection Points to a Modifier Blueprint:
- Open the VCM_LookAt Modifier Blueprint.
-
Click Class Defaults from the Blueprint toolbar.
-
In the Details panel under the VCam Connection Points category, expand Connection Points and click the Add (+) icon to add a new element. Name the element "ToggleActivation".
-
Expand the properties for the ToggleActivation element and assign IA_ToggleActivation Input Action Asset to the Associated Action assignment slot.
- Compile and Save.
In this section, you'll create the buttons that'll be used to toggle the virtual camera's object tracking on and off,using a VCam Widget asset. Unlike UMG Widgets, VCam Widgets differ in their ability to accept input and define connections to Modifier Connection Points.
To create a VCam Widget:
-
In the Content Browser, click Add (+) > VCam and add a VCam Widget Asset. Name the widget VCW_ConnectionButton.
A pop up window prompts you for an Input Mapping Context. You can click Skip to proceed with opening the Blueprint.
- Open the VCW_ConnectionButton Blueprint.
-
Select the Library panel and under the Common category, drag a Button into the designer graph.
-
In the Hierarchy panel, rename the Button to "Button".
-
In the top-right of the VCam Widget Blueprint, click on Graph to open the editing mode for Blueprint scripting.
- Select Class Defaults from the Blueprint toolbar.
-
In the Details panel, navigate to the VCam Connection category, expand Connection, and click the Add (+) icon to add a new element. Name the element "Button".
-
Expand the properties for the Button connection element and set the following properties:
- Requires Input Action should be checked.
- Action Type should be set to Digital (bool).
- Compile and Save.
You now have a VCam Widget Named VCW_ConnectionButton with a Button widget.
With the VCam Widget button setup in the previous section, you can add some scripted logic to the VCam Widget Blueprint to control how the button widget interacts with the Modifier Blueprint (VCM_LookAt).
To add the VCam Widget's Blueprint logic:
- In the Graph mode, go to My Blueprint > Variables, and select the Button variable.
-
In the Details panel and expand the Events category, and click the Add (+) button next to On Clicked to add one to the graph.
- Right-click in the Event Graph and add a Get Connections variable from the VCam Connections category.
- Drag off the Get Connections variable and add a Find node. Set the Key Name text field input to be "Button" — matching the name of your Connection created earlier.
- Drag off the output pin of the Find node's Blue pin and add a Get Connected Modifier node.
- Drag off the Return Value of the Get Connected Modifier node and add a Get Owning VCam Component node.
- Drag off the Return Value of the Get Owning VCam Component node and add an Inject Input for Action node.
- On the Inject Input for Action node, do the following:
- Right-click the Raw Value input and select Split Struct Pin to show individual inputs for X, Y, and Z values.
- Set the Raw Value X to 1. This ensures when the button is pressed, your Input Action receives a value matching True, which mimics a hardware button's down press.
- Set the dropdown selection for Raw Value Type to Digital (bool).
- Drag off the Find node's Blue pin and add a Get Connected Input Action node.
- Drag off the Return Value of the Get Connected Input Action node, and connect it to the Action input of the Inject Input for Action node.
- Compile and Save.
Once completed, your VCW_ConnectionButton VCam Widget Blueprint graph should look similar to this:
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
Copy and paste the Blueprint code above directly into your VCM_LookAt Modifier to recreate the graph above in your own project.
Create a HUD to Manage the Connection
In this section, you'll create a new VCam Widget that uses the Button VCam Widget you created in the previous section. This widget is used to display a clickable button that sets the toggle state of the virtual camera's object tracking behavior set up in the Modifier Blueprint created earlier in this guide.
To create a HUD:
-
In the Content Browser, click Add (+) > VCam and add a VCam Widget Asset. Name the widget VCW_ConnectionHUD.
A pop up window prompts you for an Input Mapping Context. You can click Skip to proceed with opening the Blueprint.
- Open VCW_ConnectionHUD.
-
In the Library panel in the Search Box, type in "VCW_ConnectionButton". You should see the VCam Widget of the same name that you created in the Create a VCam Widget section.
- Drag the VCW_ConnectionButton from the Library panel into the Hierarchy panel.
-
Right-click on the VCW_ConnectionButton widget in the Hierarchy panel and go to Wrap With and add a Canvas Panel from the breakout list.
Wrapping with the Canvas Panel is used to prevent the HUD from being a button that takes up the entirety of the screen.
-
In the Details panel under the VCam Connections category, expand Connection Points > Button.
-
Check the box next to Manually Configure Connection. A new expandable category called Connection Target Settings appears.
-
Expand Connection Target Settings and set the following:
- Set the Target Modifier Name to "LookAt".
- Set the Target Connection Point to "ToggleActivation".
- Save and Compile.
You should now have a VCam Widget Blueprint for the HUD to display your Button VCam Widget with its logic to set its state.
By default, when you add the Button and wrap it to the Canvas Panel, it is placed in the top-leftmost corner of the screen. You can choose to move this button in the VCam Widget's Designer by clicking and dragging it to another part of the canvas to display it in a different part of the screen. Also, if you want this button's functionality to be clearer, you can add text to it in the Hierarchy panel.
Set the HUD Blueprint on the VCam Component
With the HUD VCam Widget Blueprint set up, your next step is to apply it to the VCam Component to be displayed on the screen as an element of the Output Providers.
To apply the HUD VCam Widget to a VCam Component:
- Select your Virtual Camera Actor in the level.
- In the Details panel, select the VCam Component from the components hierarchy.
-
In the Details panel under the Output Provider section, use the Output Provider Element you created in the Initial Setup of an Output Provider section or add one now.
This demonstration uses the Pixel Streaming Output Provider.
-
Expand the Output Provider element and set the following:
- Use the dropdown selection for UMG Overlay to assign your VCW_ConnectionHUD VCam Widget.
- Check the box next to Is Active.
If this is already checked, uncheck and check it again to manually refresh the output provider.
Once you've assigned the HUD to the VCam Actor, you can click the button in the viewport to toggle object tracking on and off. In this example, the sphere is set up with a InterpToMovement and moves back and forth when using Simulate or Play-in-Editor modes. This makes it easier to test the virtual camera's object tracking when toggling it off and on again.
Virtual Camera Customization Through Connections and Blueprint Interfaces
This section of the guide is optional.
This section of the guide demonstrates how you can customize your virtual camera HUD further using Connections and Blueprint Interfaces to change the button color according to the state of the Modifier. This is useful for features where you want to reuse a single-button VCam Widget for different purposes, like VCW_ConnectionButton that was created earlier in this guide.
Create a Blueprint Interface Asset
In this section, you'll create a Blueprint Interface that is used to connect to your Modifier Blueprint.
To create a Blueprint Interface:
- In the Content Browser, click Add (+) > Blueprint and add a Blueprint Interface Asset. Name the interface BPI_ConnectionButton.
- Open BPI_ConnectionButton.
-
In the My Blueprint panel under the Functions category, rename NewFunction to "GetButtonColor".
-
In the Details panel, locate the Inputs category, and click the Add (+) icon to add a new parameter. Set its type to Name and name it "ConnectionPoint".
-
In the Outputs category, click the Add (+) icon to add two parameters:
- Name the first parameter "Color", and set its Type to Linear Color.
- Name the second parameter "Success", and set its Type to Boolean.
- Compile and Save the Blueprint.
Connect Modifier Blueprint to Interface Blueprint
In this section, you'll set up the VCM_LookAt Modifier Blueprint to connect to the BPI_ConnectionButton Blueprint Interface created in the previous section.
To set up the connection to the Blueprint Interface:
- In the Content Browser, open the VCM_LookAt Modifier Blueprint created in the Create a Modifier Blueprint section of this page.
- Select Class Settings from the Blueprint toolbar.
-
In the Details panel, locate the Interfaces category, and use the dropdown selection for Implemented Interfaces to select the BPI_ConnectionButton Blueprint Interface.
- Compile and Save.
Set Up the Interface Blueprint Logic
With your Blueprint Interface connection implemented with the VCam Modifier, you can add some logic to VCM_LookAt Modifier Blueprint to define which color the button sends when toggled on and off.
To connect your button:
-
In the VCM_LookAt Blueprint, go to the My Blueprint panel. Under the Interfaces category, double-click Get Button Color to open its own graph tab.
- In the Get Button Color graph, drag off the Connection Point pin and add a Switch on Connection Points node.
- Break the wire between the Get Button Color node and the Return Node by holding ALT and Left Mouse Click the wire.
- Drag off the Get Button Color node and connect it to the Switch on Connection Points node.
- Drag off the Default execution pin of the Switch on Connection Points and connect it to the Return Node. Move the Return Node down and out of the way for the next step.
- Drag off the Toggle Activation execution pin of the Switch on Connection Points node and add a Return Node.
- Check the box next to Success on the Return Node.
- In the My Blueprint panel, locate the Variables category, and drag the ShouldLookAt variable into the graph and select Get ShouldLookAt from the list.
- Drag off the Get ShouldLookAt node and add a Select Color node.
- Drag off the Return Value output pin of the Select Color node and connect it to the Color pin of the Return Node coming from the Toggle Activation execution of the Switch on Connection Points node.
-
On the Set Color node, click the box next to A and B to open the color picker and set a color for each.
- Compile and Save.
Your Get Button Color graph should look similar to this:
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
Copy and paste the Blueprint code above directly into your VCM_LookAt Modifier to recreate the graph above in your own project.
Set Up the Modifier Blueprint Logic
In this section, you'll set up how the widget requests, parses, and applies the information configured in the previous section.
To define the rules:
- Open the VCW_ConnectionButton VCam Widget created in the Create a VCam Widget and Initial Setup section of this page.
-
Click the Graph button to switch to graph editing mode.
- In the Blueprint toolbar, click on Class Defaults.
- In the Details panel, locate the VCam Connections category, expand Connections, then expand Button.
-
Click the Add (+) icon next to Required Interfaces, and select the BPI_ConnectionButton Blueprint Interface from the list.
You can use either Required Interfaces or Optional Interfaces when assigning the Blueprint Interface to this VCam Widget Blueprint. Assigning it to the Required Interfaces makes it mandatory for your Modifier Blueprint to have implemented your Blueprint Interface in order for the connection to succeed. If you choose Optional Interfaces, the connection can succeed regardless of your Modifier Blueprint having implemented the Blueprint Interface.
- Right-click in the Event Graph and add a Get Connections variable from the VCam Connections category.
- Drag off the Get Connections node and add a Find node.
- Drag off the blue pin of the Find node and add a Get Connected Modifier node.
- Drag off the Return Value of the Get Connected Modifier node and add an Is Valid node.
- Drag off the Return Value of the Get Connected Modifier node and add a Get Button Color (Message) node.
- Drag off the blue pin of the Find node and add a Get Connection Point Name node.
- Drag off the Return Value of the Get Connection Point Name and connect it to the Connection Point input of the Get Button Color node.
- Drag off the Event Tick node and connect it to the Exec input of the Is Valid node.
- Drag off the Is Valid execution pin of the Is Valid node and connect it to the Get Button Color node.
- Drag off the Get Button Color execution pin and add a Branch node.
- Drag off the Success pin of the Get Button Color node and connect it to the Condition pin of the Branch node.
- In the My Blueprint panel under the Variables category, drag a Button variable into the graph and select Get Button from the list.
- Drag off the Button node and add a Set Background Color node.
- Drag off the True pin of the Branch node and connect it to the input on the Set Background Color node.
- Drag off the Color pin of the Get Button Color node and connect it to the In Background Color pin of the Set Background Color node.
- Compile and Save.
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="Target\nBlueprint Map Library Object Reference",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="Target Map\nMap of Names to VCam Connection Structures\n\nThe map to perform the lookup on",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="Key\nName (by ref)\n\nThe key that will be used to look the value up",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="Value\nVCam Connection Structure\n\nThe value associated with the key, default constructed if key was not found",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="Return Value\nBoolean\n\nTrue if an item was found (False indicates nothing in the map uses the provided key)",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="Target\nVCam UIFunction Library Object Reference",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="Connection\nVCam Connection Structure (by ref)",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="Return Value\nVCam Modifier Object Reference\n\n Gets the Connected Modifier for the given VCam Connection\n The returned Modifier is guaranteed to be valid if IsConnected() is 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="\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 579DC6854D6CAB3EAF85B6B785FA971D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=17DFD49A4ECA99FA35E4C296BFA74B1F,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,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="Target\nObject Reference",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="Connection Point\nName",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="Color\nLinear Color Structure",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="Success\nBoolean",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="Target\nVCam UIFunction Library Object Reference",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="Connection\nVCam Connection Structure (by ref)",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="Return Value\nName\n\n Gets the name of the associated Connection Point for a given VCam Connection.\n This will return "None" if the IsConnected() is false",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="\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_IfThenElse_0 E839B8F640E935B7C1E80CB017239A55,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9D63DB434E2C6FB91A2318B7CD0BD762,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=B9ABAC97415820E10890B2BD1BDCDF69,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nButton Object Reference",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="In Background Color\nLinear Color Structure",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
Copy and paste the Blueprint code above directly into your VCM_LookAt Modifier to recreate the graph above in your own project.
Final Result
After completing this guide, you'll have a custom virtual camera that uses Modifiers, Connection Points, and VCam Widgets to toggle camera tracking on and off with a togglable color-changing button in the viewport.