Existent Unreal Plugin
v0.1.0
v0.1.0
  • πŸ‘‹Welcome
  • Overview
    • πŸ’‘What we do
    • ✨Features
    • πŸ“•Glossary
    • 🐞Bug Reports & Feature Requests
    • ❓FAQ
    • πŸ—’οΈRelease Notes
      • Existent v0.0.1 Release Notes
      • Existent v0.0.2 Release Notes
      • Existent v0.1.0 Release Notes
  • Learning Existent
    • πŸ› οΈHardware Setup
    • πŸ–₯️Getting Started
      • Installing Unreal Engine
      • Installing Existent Plugin
      • Setting Up a New Project
        • Setup Wizard
        • Manual Setup
      • Installing your License Key
      • Adding Tracked Objects
        • Using Vive Ultimate Trackers
        • Outside-in (Optitrack/Vicon) Setup
          • Aligning HMDs with outside-in systems
          • 3D Print an Alignment Tool
          • Creating Digital Twins/Props
    • 🎭Backstage Mode
    • πŸ“ΌSession recording & playback
    • πŸŒ‰RealityBridge
  • GUIDES
    • πŸ“¦Building and packaging a project
    • πŸ–οΈGrip Authoring
      • Creating a pose and entering edit mode
      • Interface Overview
      • Controls
      • Pose Edits
      • Operations
    • πŸŽ›οΈControl Panel
      • Trackers Tab
      • Level Tab
      • Alignment Tab
      • Server Tab
      • Recordings Tab
    • πŸ‘¨β€πŸ’ΌCustomising Player Avatar
      • Mappings
        • Hand Bone Mappings
        • Body Bone Mappings
        • Tracker Mappings
      • Animation Blueprint
      • Assign assets to Player
  • Resources
    • πŸ”¬Classes/Components
      • ExistentStage
      • ExistentSpace
      • ExistentVehicle
      • ExistentPlayer (Pawn)
      • ExistentPlayerAnimInstance
      • ExistentGameModeBase
      • ExistentTrackerComponent
      • ExistentGrabComponent
      • ExistentGripComponent
      • ExistentHandComponent
      • ExistentTrackingConfidenceComponent
    • πŸ“ƒExistent API
      • πŸ”¬BP Nodes
        • AsyncTask_RealityBridgeInitialised
          • AddDelegate_Bind_Event_to_Initialised
          • ClearDelegate_Unbind_all_Events_from_Initialised
          • Initialised
        • ExistentAlignmentComponent
          • BeginSampling
          • BeginSamplingNoDelay
          • HasValidOffset
        • ExistentAnimationLibrary
          • GetBoneLength
          • GetChildrenBones
          • GetMixamoBodyMappingsMatchConfig
          • GetMixamoHandMappingsMatchConfig
          • GetRefSkeletonBoneComponentTransform
          • GetRefSkeletonBoneLength
          • GetUE4BodyMappingsMatchConfig
          • GetUE4HandMappingsMatchConfig
          • GetUE5BodyMappingsMatchConfig
          • GetUE5HandMappingsMatchConfig
          • SetAnimInstanceClass
        • ExistentBodyBoneMappings
          • GetBodyBones
          • GetBoneName_ByBodyBone
          • GetExcludedExistentBodyBones
          • GetSpineBoneNames
        • ExistentBodyCalibration
          • AddArmsLength
          • AddCalibration
          • AddEyeHeight
          • AddFriendlyName
          • AddHandSize
          • AddLegLength
          • AddShoulderWidth
          • DeleteAllCalibrations
          • DeleteCalibration
          • GetArmsLength
          • GetCalibration
          • GetCalibrations
          • GetCalibration_ByFriendlyName
          • GetEyeHeight
          • GetFriendlyName
          • GetHandSize
          • GetLegLength
          • GetShoulderWidth
        • ExistentBoneMappingsBase
          • AreBoneMappingsValid
          • GetExcludedBoneNames
          • GetHandBones
          • GetInvalidBoneMappings
          • GetMappedBones
          • GetMeshRotation
          • IsHandBone
        • ExistentFootEventsInterface
          • OnFootDown
          • OnFootUp
        • ExistentGrabComponent
          • AddDelegate_Bind_Event_to_On_Grip_Attach
          • AddDelegate_Bind_Event_to_On_Grip_Detach
          • AddDelegate_Bind_Event_to_On_Grip_Transfer
          • ClearDelegate_Unbind_all_Events_from_On_Grip_Attach
          • ClearDelegate_Unbind_all_Events_from_On_Grip_Detach
          • ClearDelegate_Unbind_all_Events_from_On_Grip_Transfer
          • GetAttachmentStateString
          • OnGripAttach
          • OnGripDetach
          • OnGripTransfer
        • ExistentGripComponent
          • AddDelegate_Bind_Event_to_On_Player_Object_Drop
          • AddDelegate_Bind_Event_to_On_Player_Object_Pickup
          • ClearDelegate_Unbind_all_Events_from_On_Player_Object_Drop
          • ClearDelegate_Unbind_all_Events_from_On_Player_Object_Pickup
          • GetWristOffset
          • GetWristRotation
          • IsEnabled
          • IsParentMoving
          • OnPlayerObjectDrop
          • OnPlayerObjectPickup
          • ProjectComponentTransformOnCircleGripShape
          • ProjectComponentTransformOnCylinderGripShape
          • ProjectComponentTransformOnGripShape
          • SetEnabled
        • ExistentHandBoneMappings
          • GetBoneRotation
          • GetBoneRotation_ByBone
          • GetCapsuleTraceModifiers
          • GetExcludedExistentBones
          • GetGripBone
        • ExistentHandComponent
          • GetBoneComponentTransforms
          • GetBoneWorldTransforms
          • GetExistentPlayer
          • GetGrabComponent
          • GetTrackingStatus
          • GetTransformFromWristTracker
          • GetWristBoneWorldTransform
          • IsWristTrackerDataValid
          • SetBoneMappings
          • SetHandTrackingEnabled
          • SetTrackerMappings
          • SetWristTransform
        • ExistentHandDataFilterComponent
          • AddDelegate_Bind_Event_to_On_Calculated_Data
          • ClearDelegate_Unbind_all_Events_from_On_Calculated_Data
          • OnCalculatedData
        • ExistentHandLibrary
          • DrawHandBoneWorldTransforms
          • GetBoneIndex
          • GetBoneLocation
          • GetBoneLocations
          • GetBoneRadius
          • GetBoneRotation
          • GetBoneTransform
          • GetCloseHandTransforms
          • GetFingerFromBone
          • GetFingerParentBones
          • GetHandTrackingStatus
          • GetHandXRDeviceID
          • GetHMDName
          • GetOpenHandTransforms
          • GetParentBone
          • GetParentBoneSpaceCloseHandTransforms
          • GetParentBoneSpaceOpenHandTransforms
          • IsBoneSupported
          • IsHandTrackingEnabled
          • LogHandBoneWorldLocations
          • LogHandBoneWorldRotations
          • UpdateBoneInPose
        • ExistentLibrary
          • CapsuleTraceMultiForObjects
          • CapsuleTraceSingleForObjects
          • DrawSampleArray
          • ExistentBodyBoneToString
          • ExistentBoneToString
          • ExistentFingerToString
          • ExistentHandToString
          • GetControllerOrientationAndPosition
          • GetControllerTrackingStatus
          • GetMatchString
          • SavePlayerData
          • SetBackstageModeEnabled
          • StringToExistentBodyBone
          • StringToExistentBone
          • TransformSampleToWorld
        • ExistentMathLibrary
          • AverageOfFloatArray
          • GetAngleFromVectors
          • GetCompDirectionFromPosAxis
          • GetRotatorMax
          • GetWeightsFromAlpha
          • IsRotatorLessThan
          • LineBoxIntersection
          • MedianOfFloatArray
        • ExistentPawn
          • AddDelegate_Bind_Event_to_On_Current_Space_Changed
          • ClearDelegate_Unbind_all_Events_from_On_Current_Space_Changed
          • GetCurrentSpace
          • GetSpaceTransform
          • IsAReplicatedClient
          • OnCurrentSpaceChanged
          • SetCurrentSpace
        • ExistentPlayer
          • AddDelegate_Bind_Event_to_On_Object_Drop
          • AddDelegate_Bind_Event_to_On_Object_Pickup
          • ApplyCalibrationSettings
          • ClearDelegate_Unbind_all_Events_from_On_Object_Drop
          • ClearDelegate_Unbind_all_Events_from_On_Object_Pickup
          • GetEquippedProps
          • GetHeadTransform
          • IsHandCollider
          • OnObjectDrop
          • OnObjectPickup
          • SetBackstageModeEnabled
          • SetCheckHandsCollidingWithStageEnabled
        • ExistentPlayerAnimInstance
          • GetFootTrackerTransform
          • GetHandComponent
          • IsSimulating
          • SetLeftBoneWorldTransforms
          • SetRightBoneWorldTransforms
          • UpdateCalibrationSettings
        • ExistentPlayerController
          • SaveCurrentTrackerInfoToOverrideSet
        • ExistentSessionRecording
          • AddDelegate_Bind_Event_to_On_Playback
          • ClearDelegate_Unbind_all_Events_from_On_Playback
          • GetCurrentRecordingDurationSecs
          • GetPlaybackTimeFraction
          • OnPlayback
        • ExistentSpace
          • SetMobility
        • ExistentTrackerComponent
          • AddDelegate_Bind_Event_to_On_Current_Space_Changed
          • AddDelegate_Bind_Event_to_On_Tracking_Lost
          • AddDelegate_Bind_Event_to_On_Tracking_Resumed
          • ClearDelegate_Unbind_all_Events_from_On_Current_Space_Changed
          • ClearDelegate_Unbind_all_Events_from_On_Tracking_Lost
          • ClearDelegate_Unbind_all_Events_from_On_Tracking_Resumed
          • GetCurrentSpace
          • GetId
          • GetTrackerRelativeTransform
          • GetTrackerWorldTransform
          • GetTrackingIDs
          • GetTrackingStatus
          • OnCurrentSpaceChanged
          • OnTrackingLost
          • OnTrackingResumed
          • Server_SetId
          • SetCurrentSpace
        • ExistentTrackerMappings
          • ApplyTrackerOffsetToTrackerTransform
          • GetFootTrackerDelta
          • GetFootTrackerOffset
          • GetHandTrackerDelta
          • GetHandTrackerOffset
        • ExistentTrackingConfidenceComponent
          • GetConfidenceValue
          • GetConfidenceValueByType
          • GetDistanceConfidenceValue
          • GetFingersConfidenceValues
          • GetFingersOcclusionConfidenceValue
          • GetOcclusionConfidenceValue
          • GetStillHandConfidence
          • GetVelocityConfidenceValue
          • GetWristConfidenceValue
          • PrintAllConfidenceValues
          • PrintBonesOcclusionConfidence
          • PrintConfidence
          • PrintDistanceConfidence
          • PrintFingersConfidence
          • PrintFingersOcclusionConfidence
          • PrintStillHandConfidence
          • PrintVelocityConfidence
          • PrintWristConfidence
          • SetForcedConfidenceValue
        • ExistentUMGWindowComponent
          • CloseWindow
          • OpenAsWindow
          • OverrideManualDpiScalingWindowSize
          • SetManualDpiScaling
        • ExistentVehicle
          • AddDelegate_Bind_Event_to_On_Arrived_at_Destination
          • AddDelegate_Bind_Event_to_On_Drive
          • AddDelegate_Bind_Event_to_On_Reverse_Direction
          • ClearDelegate_Unbind_all_Events_from_On_Arrived_at_Destination
          • ClearDelegate_Unbind_all_Events_from_On_Drive
          • ClearDelegate_Unbind_all_Events_from_On_Reverse_Direction
          • Drive
          • GetCurrentSpeed
          • GetMaxSpeed
          • OnArrivedAtDestination
          • OnDrive
          • OnReverseDirection
          • ResetToSource
          • ReverseDirection
          • SetIsPaused
        • ExistentViveTrackingSystem
          • RecordOrigin
        • K2Node_IsRealityBridgeInitialised
          • UK2Node_IsRealityBridgeInitialised
        • K2Node_RealityBridgeReceiveEvent
          • UK2Node_RealityBridgeReceiveEvent
        • K2Node_RealityBridgeSendEvent
          • UK2Node_RealityBridgeSendEvent
        • K2Node_RealityBridgeUnbindEvent
          • UK2Node_RealityBridgeUnbindEvent
        • RealityBridge
          • AddDelegate_Bind_Event_to_On_Reality_Bridge_Initialised
          • ClearDelegate_Unbind_all_Events_from_On_Reality_Bridge_Initialised
          • GetInitialised
          • Initialise
          • OnRealityBridgeInitialised
        • RoundProgressBar
          • SetPercent
  • Tutorials & Examples
    • πŸ“šTutorials
Powered by GitBook
On this page
  • Overview
  • How to use
  • Custom spline path
  • Custom velocity curve
  • Additional Details
  1. Resources
  2. Classes/Components

ExistentVehicle

PreviousExistentSpaceNextExistentPlayer (Pawn)

Last updated 10 months ago

Overview

An ExistentVehicle is the core system Existent provides for locomotion across the virtual world. Whenever you create an experience where can traverse an area larger than a single , we recommend using a Vehicle to 'drive' them between Spaces. From a design perspective, the Vehicle metaphor works well when combined with a mesh (e.g. a car or a lift) and interactions (e.g. fan wind or floor vibrations) to give Players a believable context for the locomotion.

In technical terms, however, a Vehicle is simply a special type of with built-in functionality for moving smoothly from one Space to another, ensuring that all its children are perfectly aligned with the source and destination Space at either end of the drive. A Vehicle exists in one of four states: 'stationary at source', 'driving', 'paused', and 'stationary at destination'; it also exposes a blueprint-accessible API for transitioning between these states while the game is running.

By default, a Vehicle moves in a straight-line linearly interpolated path between the source and destination Space over a developer-specified number of seconds, but also provides an optional SplineComponent which can be modified by hand to create a custom path to the destination.

How to use

You can drag and drop an instance of the ExistentVehicle Actor into your level or create your own blueprint class that extends the ExistentVehicle class. From there, assign values to the Source Space and Destination Space properties by linking them to Spaces that already exist in your level. Once this has been done, the Vehicle should automatically snap to align to the source Space.

If your Vehicle Actor contains a mesh, you can enable the Align to Mesh property, and select the relevant mesh in the Vehicle mesh property. This will align the Vehicle icon and connecting line to be centred on your mesh, to better visualise the start and end point of the Vehicle’s path.

Custom spline path

By default, a Vehicle will drive in a straight line at constant velocity from the source to the destination Space, over the time provided in the Driving Time Secs property (10 by default). If you would like to provide a custom path between the source and destination, however, enable the Use Spline property, and modify the Path Spline component to draw an Unreal spline for the Vehicle to follow.

Custom velocity curve

If you would like your Vehicle to accelerate and decelerate at specific points along its journey (i.e. travel with non-constant speed), disable the Constant Speed property. You will now be able to supply a custom FloatCurve in the Speed Curve property.

To create this curve, simply right-click anywhere in your content browser and select Miscellaneous->Curve, and select 'CurveFloat' in the dialogue box that appears. The y-value of each point along this curve determines the speed of the Vehicle at that point along its journey, multiplied by the Vehicle's Speed Scale. The horizontal axis represents the time elapsed during the drive, with the leftmost point being the start of the journey, and the rightmost point the end. Note that the Vehicle expects a curve with a time domain of [0, 1], and if the supplied curve does not match this, it is automatically adjusted at runtime.

Also note that when working with varying-speed Vehicles, since speed is fully customisable via the Speed Curve and Speed Scale properties, the Driving Time Secs variable is now automatically generated based on these speed parameters and the length of the path.

Once your custom speed curve has been set up, Existent will automatically render 'speed signs' when viewing the Vehicle in the editor (or in backstage mode), which indicate the speed and acceleration at regular points along the Vehicle's path.

Additional Details

  • Automatic Player and prop transfer: The Vehicle automatically handles transferring all desired Players (as well as any props they’re holding) smoothly from the source to the destination Space, placing them in the destination Space when the Vehicle arrives.

  • Blueprint-accessible API:

    • Drive() initiates driving to the destination Space, and takes in a list of Players and props to take along for the ride.

    • SetIsPaused() pauses a driving Vehicle, or resumes driving for a Vehicle that's already paused.

    • ResetToSource() resets the Vehicle back to the 'stationary at source' state.

    • Reverse() swaps the source and destination Spaces. NB: Will not reverse the path of a custom spline.

    • The OnArrivedAtDesination event is fired when the Vehicle arrives at the destination Space.

  • Smooth spline-based movement: If you’re building a custom path for the Vehicle to take when driving, Existent will automatically handle aligning the Vehicle smoothly with the source and destination Spaces at either end of the drive, even if the start and end points of your spline do not line up perfectly. We recommend enabling the Visualize Roll and Scale option when selecting the spline component in the Unreal editor to ensure there are no sudden jumps or rotations elsewhere in your path.

  • Server-authoritative: For multiplayer experiences, all Vehicle functions only need to be invoked once on the server machine, and the Vehicle’s state and location (including which Players and props are attached) will automatically replicate to all other connected clients.

In the Unreal editor (or in-game with enabled), a Vehicle is visualised as a white with a gradient-coloured line going between the source and destination Spaces, with a car icon at either end. To prevent cluttering the UI, the Vehicle’s grid mesh (see the Space section) is only visible in-game while in the β€œdriving” state.

To initiate driving while the game is running, you can invoke the Drive() function, which takes in a list of and to take along for the ride, and automatically inserts them into the destination Space once the drive has completed.

πŸ”¬
backstage mode
Space
Players
props
Players
Space
RealityBridge
Space
Drawing a custom Spline path for the Vehicle to follow
Vehicle with custom speed curve and custom spline path, showing speed signs along the path