Flight System
Add the power of flight to your world
Flight System preview
Udon Toolkit's Flight System allows your players to fly like a superman, glide across the ground and hover mid air on both Desktop and VR platforms!
Check it out in my Catch A Flight world!
A more developer-oriented test world with more info is also available here

Features

    Cross-platform (VR/Desktop) flight system with Superman-like controls (point toward direction)
    Ability to glide across the ground maintaining consistent height
    Ability to hover mid-air
    One Handed mode support
    Speed Boost and Flight Restriction mechanics
    Hover and Gliding mechanics extendable with your own logic via provided callback events

Installation

    1.
    Drag the Flight System prefab from the UdonToolkit/Flight System folder into your scene
    2.
    Build a test version
    3.
    Jump to start flying!
Testing in editor requires CyanEmu

Usage

    VR
      Point your arms slightly forward and up, jump to start the flight. If glide is enabled (it is by default) - point your arms slightly above your head to stop the glide and takeoff
      Spread your arms to slow down, bring them together to speed up
      Point where you want to fly. Think about it as if you were a Superman
      Point back to freeze mid-air
      When gliding - point upwards, above your head to take off
      When gliding - spread your arms to slow down and point downward to land
    VR One Handed
      Point the selected one handed tracking source where you want to fly (Head, Left Hand or Right Hand)
      Press Left Trigger or Right trigger to slow down
      When gliding - look up to take off
      When gliding - press down the trigger and look towards the ground to land
During glide when going full speed (arms close together, pointing in same direction) you will not be able to land by pointing your arms towards the ground. That is done to help with arm fatigue allowing for extended periods of gliding without getting tired. To land - slow down by spreading your arms and point them towards the ground
    Desktop
      Jump to start flying, if glide is enabled (it is by default), press and hold T to takeoff
      Use your mouse to control the direction
      There are currently no speed controls on desktop
      If hover is enabled (it is by default), press F to enter hover mode, you'll freeze in place allowing you to look around and chat with people. Press F again to exit hover
      Press P to respawn to the Reset Position

Configuration

UdonToolkit's FlightSystem provides many configuration options for you to adjust. I recommend still using the prefab as a starting point for easier configuration though.

Parameters

    Tracking References
      Right Hand: Right hand tracking object
      Left Hand: Left hand tracking object
      Head: Head tracking object
    General Settings
      Max Speed: Maximum flight speed
      Allow Boosting: Specifies whether the Boost event will do anything
      Boost Length: Determines the time of the boost in seconds
      Boost Speed: Maximum speed during boost
      Allow Gliding: Specifies whether gliding along the surface is allowed
      Ground Layers: Layers used to determine the ground altitude used for landing/takeoff speed scaling and gliding
      Allow Hover: Specifies whether hovering is allowed using the hover key
If Allow Gliding is checked - Desktop players will need to press the takeoff/landing key in order to enter flight or exit glide
    Comfort Settings
      Acceleration Smooth Factor: The lerping amount applied to the acceleration (lower is smoother)
      Deceleration Smooth Factor: The lerping amount applied to deceleration (lower is smoother)
      Ground Slow Max Height: The maximum height at which the takeoff/landing assist will take place. FlightSystem will scale the maximum speed based on the distance from the ground to aid with precise landing and smoother takeoff
      Min Ground Speed Modifier: Specifies the speed threshold at which the system will automatically slow the player down during takeoff/landing. The value of 0.5 will mean that the player will be never be slowed down to less than 50% of max speed during takeoff/landing
It is recommended to always have a relatively high Deceleration Smooth Factor as sluggish deceleration can cause the feeling if sluggishness and cause nausea
    Desktop Keybinds
      Glide Take Off Key: The takeoff/landing key allowing desktop players to perform those actions
      Freeze In Place Key: The hover key switching between hovering and gliding/flying states if hovering is allowed
      Force Respawn Key: The respawn key which will stop the flight and teleport the player to the Reset Position
    Initial State
      Flight Restricted: Specifies whether the flight system is turned off by default as if the player was in a restricted zone. You can send an AllowFlight event to the system to enable it
      Reset Position: Determines the target to which the player will be teleported when pressing the Force Respawn Key
    Callbacks
      On Flight Start: Sends the specified event to the provided UdonBehaviour when the player engages the flight system
      On Flight End: Sends the specified event to the provided UdonBehaviour when the player lands
      On Hover Start: Sends the specified event to the provided UdonBehaviour when desktop hover is started by pressing the Freeze In Place Key or when the player spreads their arms to stop in VR
      On Hover End: Sends the specified event to the provided UdonBehaviour when desktop hover is ended by pressing the Freeze In Place Key again or when the player brings their arms closer together
      On Glide Start: Sends the specified event to the provided UdonBehaviour when the player enters glide
      On Glide End: Sends a the specified event to the provided UdonBehaviour when the player exists glide (either by taking off or landing)
There is an included FlightSystemDebugger behaviour with the logging for all the Flight System Callbacks enabled so you can quickly test your environment and when each system engages/disengages
VR currently has a very rudimentary hover mechanic. I would encourage you to create some extra system for VR specific hover toggle, like maybe a couple interacts that appear if the player slows down, which they can click to switch into a hover mode. That will make the hover / flight switch more intentional and less spontaneous. I might add an example of this at some point in the future

Events

    Boost: Raises the Max Speed to the Boost Speed for Boost Length seconds
    RestrictFlight: Prohibits players from flying, even if the player is already mid-flight (will make them fall)
    AllowFlight: Allows players to fly
    DisableBoosting: Disables the boosting behaviour, calling Boost after boosting has been disabled will not do anything. This does not affect players that are already boosting. They will stop boosting as their boost timer runs out.
    EnableBoosting: Enables the boosting behaviour
    Stop Boost: Stops currently active boost
    DisableGliding: Disables gliding, players will simply land and take off while close to the ground. The takeoff/landing speed helpers will still work as usual. This will interrupt current glide
    EnableGliding: Enables gliding
    StopGliding: Stops current glide and grounds the player
    EnableOneHandedMode: Enables One Handed Mode for flight controls
    SetOneHandedTargetHead: Sets One Handed Mode tracking target to player's Head
    SetOneHandedTargetLeftHand: Sets One Handed Mode tracking target to player's Left Hand
    SetOneHandedTargetRightHand: Sets One Handed Mode tracking target to player's Right Hand
    DisableOneHandedMode: Disables One Handed Mode for flight controls and returns to the default two-handed flight
If you are planning to build upon the logic exposed by the Flight System, I would also encourage you to check out the code! Almost every single line is commented, with motivation / explanation which should help you better understand how it all comes together

Demo

Check it out in my Catch A Flight world!
A more developer-oriented test world with more info is also available here. The same world is also provided as a demo scene in the UdonToolkit/Demo/Flight System Demo scene. Don't hesitate to take a look!

Feedback

If you have any suggestions for the FlightSystem or encounter any issues, please do not hesitate to file an issue on Github or reach out in my Discord, as well as support the Toolkit on Patreon
Last modified 9mo ago