Knowledge Base
HomeProductsCommunityReviewsSocial
Old Knowledge Base
Old Knowledge Base
  • Knowledge Base
    • Getting to know us
  • Where to Buy
    • Become a Sponsor
    • Heathen License Agreement
  • General
    • 🔎Table of Contents
    • 🤩Getting Started
      • Indie Check List
      • Sourcing Resources
        • 🧙‍♂️Community
        • 🧞‍♂️Managed Services
        • 📣Marketing
        • 🧪Testing
    • 🧞Tips and Tricks
      • Fundamentals
        • Development Phases
      • Unity
        • Package Manager Installs
          • Missing asset after update
        • Unity Release Version
      • Unreal
        • Unity to Unreal
        • Quick Start
    • 📐Design
      • ☝️Quick Start
      • 🥾Bootstraping
      • 🤑Monetization
        • What not to do
        • Models
          • Free
          • Free to Play
          • Pay to Play
          • Pay to Win
          • Play to Earn
        • Tools
          • 😡Artificial Scarcity
          • 🤑Bundles
          • 🤔Community Marketplace
          • 🤑Expansions
          • 😡Fear of Missing Out (FOMO)
          • 😡Gatcha Mechanics
          • 🤔Microtransactions (MTX)
          • 😡NFT
            • 😡Blockchain
          • 🤔No Spend Cap
          • 😡Premium Currency
          • 🤔Season
          • 🤑Subscription
          • 😡Surprise Mechanics
      • 🎮Multiplayer
        • Networking Tools
        • Terminology
      • 🤹Multi-Scene Architecture
      • 🌐Project Architecture
      • 😊Player Motivation
    • 🏗️Development
      • ☝️Quick Start
      • ☎️Callbacks & Delegates
      • ❔Conditional Compilation
      • 🪳Debugging
      • 🚧DevOps
        • ☕Team Collaboration
        • 🛂Git Control & Unity
      • ⁉️Error Handling
        • System Dialog
        • Reporting
      • 🤯IntelliSense
      • 🪶Lambda Expressions
      • 🤹‍♀️Multi Platform Projects
      • 📑Namespace and Using
      • 🎮Unity's "New" Input System
      • 🔼Updating Visual Studio and C#
      • 💡Visual Scripting
    • ⚠️Publishers
    • 🧪Testing
      • 👋Introduction
      • ✏️Writing Formal Tests
    • 🧙‍♂️Community
      • ☝️Quick Start
    • 📣Marketing
      • ☝️Quick Start
      • 📌Tips and Tactics
      • 🤓Market Research
    • 📆Release
    • 🗺️Live
  • Steam
    • ☝️Quick Start
    • 🏆Achievements
    • 🌳Branches
    • 🗣️Community Hub
    • ⬆️Uploading to Steam
    • ☁️Cloud Save
    • 🆔CSteamID
    • 🔎Discovery Queue
    • 🕹️Downloadable Content
    • 🚫Early Access
    • 🖱️Input
    • 📦Inventory
      • 🔨Crafting System
      • 🛠️Item Definition Tools
      • 💸Microtransactions
      • 🎁Promo Items
    • 🚢Launch
    • 🥇Leaderboards
      • 🗣️Advanced Profiles
    • 🎮Multiplayer
      • ☝️Getting Started
      • 🧪Dev and Test
      • 🧑‍⚖️Authentication
      • 🛋️Lobby
      • 🧑‍🤝‍🧑Matchmaking
      • 🧑‍🔧Rich Presence
      • 💬Room Systems
      • 💁Steam Game Server
        • 👷Builds
        • ⚙️Configuration
        • 📋Server Browser
        • 🐧Setup Linux
      • 🗣️Terminology
    • 🤹Multi-Platform Project
    • 🧪Playtest
    • 🛋️Remote Play
    • 👀Reviews
    • 🏃Running a Build
    • 💶Sales
    • ⭐Stats
    • 🔑Steam API Key
    • 📃steam_appid.txt
    • 🖥️Steam Deck
    • ⚙️Steamworks
    • 🤯Store Page
    • 🛠️Workshop
      • Creating an Item
      • In-Game Browser
      • Subscribed Items
    • 🧑‍🏫User Information
      • Unity User Tools
      • Unreal User Tools
    • 🗣️Voice
  • Toolkit for Steamworks
    • Introduction
    • Maintenance Cycle
    • F.A.Q
    • Unity
      • ⚠️Known Issues
      • Unity Asset Refund Policy
      • Installation
        • Networking Integrations
      • Getting Started
      • Debugging
      • Learning
      • API Extensions
        • App.Client
        • App.Server
        • App.Web
        • Authentication
        • BigPicture.Client
        • Clans.Client
        • Friends.Client
        • Input.Client
        • Inventory.Client
        • Leaderboards.Client
        • Matchmaking.Client
        • Overlay.Client
        • Parties.Client
        • RemotePlay.Client
        • RemoteStorage.Client
        • Screenshots.Client
        • StatsAndAchievements.Client
        • StatsAndAchievements.Server
        • User.Client
        • UserGeneratedContent.Client
        • Utilities
        • Utilities.Client
        • Voice.Client
      • Objects
        • Classes
          • Achievement Data
          • Achievement Object
          • App Data
          • Authentication Session
          • Authentication Ticket
          • Avg Rate Stat
          • Chat Room
          • Clan Chat Msg
          • Clan Data
          • Currency
          • Data Model
          • DLC Data
          • Downloadable Content Object
          • Favorite Game
          • Float Stat
          • Game Data
          • Input Action
          • Input Action Data
          • Input Action Set
          • Input Action Set Data
          • Input Action Set Layer
          • Input Action Update
          • Input Controller Data
          • Int Stat
          • Inventory Result
          • Item Data
          • Item Definition
          • Item Detail
          • Leaderboard Data
          • Leaderboard Entry
          • Leaderboard Object
          • Lobby Chat Msg
          • Lobby Data
          • Lobby Game Server
          • Lobby Member Data
          • Party Beacon Details
          • Rank Change
          • Remote Storage File
          • Stat Data
          • Steam Game Server Configuration
          • UGC Query
          • User Data
          • Steam Settings
            • Colors
            • Game Client
              • Inventory Settings
            • Game Server
          • User Leave Data
          • Workshop Item
          • Workshop Item Data
          • Workshop Item Data Create Status
          • Workshop Item Key Value Tag
          • Workshop Item Preview File
        • Components
          • Friend Manager
          • Game Server Browser Manager
          • Input Action Event
          • Input Action Glyph
          • Input Action Name
          • Inventory Manager
          • Item Shopping Cart Manager
          • Leaderboard Manager
          • Leaderboard User Entry
          • Overlay Manager
          • Steam Game Server Events
          • Steam Input Manager
          • Steamworks Event Triggers
          • UGC Query Manager
          • Voice Recorder
          • Voice Stream
        • Enums
          • Friend Dialog
          • Inventory Item Type
          • Language Codes
          • Overlay Dialog
          • Sample Rate Method
          • Valve Price Categories
        • Prefabs
          • 📦Clan Chat
          • 📦Clan List
          • 📦Clan Member Count
          • 📦Friend Avatar
          • 📦Friend Groups
          • 📦Friend List
          • 📦Friend Name
          • 📦Friend Profile
          • 📦Selectable Friend ID
        • Programming Tools
          • IChatMessage
          • ILeaderboardEntryDisplay
          • IUserProfile
          • IWorkshopBrowserItemTemplate
          • LobbyMemberSlot
          • User Invite Button
        • UI Components
          • Chat Auto Join
          • Chat Stream
          • Clan Chat Director
          • Clan Chat Member Counter
          • Clan Chat Member List
          • Clan List
          • Clan Profile
          • Friend Group
          • Friend Groups Display
          • Friend Invite Dropdown
          • Friend List
          • Friend Profile
            • Image Field
            • Message Options
            • Text Field
          • Input Action Glyph
          • Input Action Name
          • Leaderboard Entry UI Record
          • Leaderboard UI List
          • Lobby Chat Director
          • Lobby Member Slot
          • Lobby Manager
          • Party Lobby Control
          • Quick Match Lobby Control
          • Rich Presence Reader
          • Rich Presence Setter
          • Set Achievement Description
          • Set Achievement Icon
          • Set Achievement Name
          • Set User Avatar
          • Set User Id Input Field
          • Set User Id Label
          • Set User Name
          • Toggle Event Helper
          • Workshop Browser Simple Item Record
      • Legacy
        • Troubleshooting
        • Getting Started
          • GameObject Initialization
          • ScriptableObject Initialization
          • API Initialization
        • Build Upload Tool
        • Debugging Tools
          • Testing
        • Components
          • Steamworks Behaviour
          • Steamworks Creator
          • Steam System Events
    • Unreal
      • What's New!
      • Installation
      • Getting Started
      • Updating Steamworks SDK
      • Packaging
      • Game Instance
      • Sockets Net Driver
      • Online Subsystem
      • Data Assets
        • Achievement
        • Downloadable Content
        • Inventory Item
        • Leaderboard
        • Stat
      • Widgets
        • BP_FriendsListDisplay
        • BP_FriendsListEntry
        • BP_FriendsListGroup
        • BP_SteamAvatarImage
        • BP_SteamUserName
      • Blueprint Nodes
        • Functions
          • 🔵Add Favorite Game
          • 🔵Add History Game
          • 🔵Add Promo Item
          • 🔵Add Request Lobby List Filter
          • 🔵Advertise Game
          • 🔵Associate with Clan
          • 🔵Attach Leaderboard UGC
          • 🔵Begin Auth Session
          • 🔵Cancel Auth Ticket
          • 🔵Check Result Steam ID
          • 🔵Clear All Key Values
          • 🔵Clear Achievement
          • 🔵Clear Rich Presence
          • 🔵Client Initialize
          • 🔵Client Run Callbacks
          • 🔵Client Should Restart
          • 🔵Compue New Player Compatibility
          • 🔵Consume Item
          • 🔵Create Lobby
          • 🔵Decompress Voice
          • 🔵Delete Lobby Data
          • 🔵Deserialize Result
          • 🔵Destroy Result
          • 🔵Download Leaderboard Entries
          • 🔵Download Leaderboard Entries for Users
          • 🔵End Auth Session
          • 🔵Exchange Items
          • 🔵Find Leaderboard
          • 🔵Find or Create Leaderboard
          • 📂Game Server Browser
            • 🔵Ping Server
            • 🔵Player Details
            • 🔵Request Server List
            • 🔵Server Rules
          • 🔵Generate Items
          • 🔵Get Achievement
          • 🔵Get Achievement by Index
          • 🔵Get Achievement Icon
          • 🔵Get Achievement Is Achieved
          • 🔵Get All Items
          • 🔵Get App Build ID
          • 🔵Get App Id
          • 🔵Get App Owner
          • 🔵Get Auth Session Ticket
          • 🔵Get Auth Ticket for Web API
          • 🔵Get Available Game Languages
          • 🔵Get Available Voice
          • 🔵Get Coplay Friends
          • 🔵Get Current Beta Name
          • 🔵Get Current Game Language
          • 🔵Get DLC Count
          • 🔵Get DLC Data By Index
          • 🔵Get DLC Download Progress
          • 🔵Get Earliest Purchase
          • 🔵Get Favorite Game
          • 🔵Get Friends
          • 🔵Get Friend Coplay Game
          • 🔵Get Friend Coplay Time
          • 🔵Get Friend Count from Source
          • 🔵Get Friend Game Played
          • 🔵Get Friend Groups
          • 🔵Get Friend Group Members
          • 🔵Get Friend Group Name
          • 🔵Get Friend Persona Name
          • 🔵Get Followed
          • 🔵Get Installed Depots
          • 🔵Get Item Definition Properties
          • 🔵Get Item Price
          • 🔵Get Items with Price
          • 🔵Get Items by ID
          • 🔵Get Launch Command Line
          • 🔵Get Launch Query Param
          • 🔵Get Leaderboard Display Type
          • 🔵Get Leaderboard Entry Count
          • 🔵Get Leaderboard Name
          • 🔵Get Leaderboard Sort Method
          • 🔵Get Lobby Chat Entry
          • 🔵Get Lobby Data
          • 🔵Get Lobby Data by Index
          • 🔵Get Lobby Game Server
          • 🔵Get Lobby Members
          • 🔵Get Lobby Member by Index
          • 🔵Get Lobby Member Data
          • 🔵Get Lobby Member Limit
          • 🔵Get Lobby Owner
          • 🔵Get Most Achieved Achievement Info
          • 🔵Get My Steam Avatar
          • 🔵Get My Steam ID
          • 🔵Get My Steam Level
          • 🔵Get Num Items with Price
          • 🔵Get Persona Name
          • 🔵Get Persona State
          • 🔵Get Player Nickname
          • 🔵Get Public IP
          • 🔵Get Result Item Property
          • 🔵Get Result Items
          • 🔵Get Result Status
          • 🔵Get Result Timestamp
          • 🔵Get Stat
          • 🔵Get Steam ID
          • 🔵Get User Achievement
          • 🔵Get User Float Stat
          • 🔵Get User Int Stat
          • 🔵Get User Restrictions
          • 🔵Get Rich Presence
          • 🔵Get User Rich Presence
          • 🔵Get User Rich Presence Key by Index
          • 🔵Get User Steam Avatar
          • 🔵Get Voice
          • 🔵Get Voice Optimal Sample Rate
          • 🔵Grant Promo Items
          • 🔵Has Friend
          • 🔵Id is Me
          • 🔵Id is Valid
          • 🔵Indicate Achievement Progress
          • 🔵Install DLC
          • 🔵Invite User To Game
          • 🔵Invite User to Lobby
          • 🔵Initialize
          • 🔵Is App Installed
          • 🔵Is Behind NAT
          • 🔵Is Cybercafe
          • 🔵Is DLC Installed
          • 🔵Is Lobby Owner
          • 🔵Is Low Violence
          • 🔵Is Phone Identifying
          • 🔵Is Phone Requiring Verification
          • 🔵Is Phone Verified
          • 🔵Is Steam Initialized
          • 🔵Is Subscribed
          • 🔵Is Subscribed App
          • 🔵Is Subscribed from Family Sharing
          • 🔵Is Subscribed from Free Weekend
          • 🔵Is Timed Trial
          • 🔵Is Two Factor Enabled
          • 🔵Is VAC Banned
          • 🔵Join Lobby
          • 🔵Leave Lobby
          • 🔵Load Item Definitions
          • 🔵Logged On
          • 🔵Log Off
          • 🔵Log On
          • 🔵Log On Anonymous
          • 🔵Mark Content Corrupt
          • 🔵Quick Match
          • 🔵Remove Favorite Game
          • 🔵Remove History Game
          • 🔵Remove Property
          • 🔵Reply to Friend Message
          • 🔵Request Current Stats
          • 🔵Request Eligible Promo Item Definitions IDs
          • 🔵Request Friend Rich Presence
          • 🔵Request Lobby Data
          • 🔵Request Lobby List
          • 🔵Request Prices
          • 🔵Request Store Auth URL
          • 🔵Request User Group Status
          • 🔵Request User Information
          • 🔵Request User Stats
          • 🔵Reset All Stats
          • 🔵Run Callbacks
          • 🔵Secure
          • 🔵Send Lobby Chat
          • 🔵Serialize Result
          • 🔵Set Achievement
          • 🔵Set Advertise Server Active
          • 🔵Set Bot Player Count
          • 🔵Set Dedicated Server
          • 🔵Set Description
          • 🔵Set Game Data
          • 🔵Set Game Tags
          • 🔵Set In-Game Voice Speaking
          • 🔵Set Key Value
          • 🔵Set Map Name
          • 🔵Set Listen for Friends Messages
          • 🔵Set Lobby Data
          • 🔵Set Lobby Game Server
          • 🔵Set Lobby Joinable
          • 🔵Set Lobby Member Data
          • 🔵Set Lobby Member Limit
          • 🔵Set Lobby Owner
          • 🔵Set Lobby Type
          • 🔵Set Max Player Count
          • 🔵Set Mod Directory Name
          • 🔵Set Name
          • 🔵Set Password Protected
          • 🔵Set Persona Name
          • 🔵Set Played with User
          • 🔵Set Product
          • 🔵Set Property
          • 🔵Set Region
          • 🔵Set Rich Presence
          • 🔵Set Stats
          • 🔵Set Spectator Name
          • 🔵Set Spectator Port
          • 🔵Set User Achievement
          • 🔵Set User Float Stat
          • 🔵Set User Int Stat
          • 🔵Shutdown
          • 🔵Start Purchase
          • 🔵Start Update Property
          • 🔵Start Voice Recording
          • 🔵Steam ID Tools
          • 🔵Stop Voice Recording
          • 🔵Store Stats
          • 🔵Store User Stats
          • 🔵Submit Update Property
          • 🔵Transfer Item Quantity
          • 🔵Trigger Item Drop
          • 🔵Uninstall DLC
          • 🔵Update Avg Rate Stat
          • 🔵Update User Avg Rate Stat
          • 🔵Upload Leaderboard Score
          • 🔵User Has License for App
          • 🔵Was Restart Requested
        • Events
          • 🔻Dlc Installed
          • 🔻Friend Chat Msg
          • 🔻Friend Rich Presence Update
          • 🔻Game Overlay Activated
          • 🔻Inventory Item Definition Update
          • 🔻Inventory Results Ready
          • 🔻Lobby Chat Msg
          • 🔻Lobby Chat Update
          • 🔻Lobby Data Update
          • 🔻Lobby Game Created
          • 🔻Lobby Join Requested
          • 🔻Micro Txn Authorization Response
          • 🔻Persona State Change
          • 🔻Rich Presence Join Requested
          • 🔻Servers Connected
          • 🔻Server Connect Failure
          • 🔻Server Disconnected
          • 🔻Ticket for Web API Response
        • Types
          • 🟩Achievement Status
          • 🟩Auth Ticket Data
          • 🟩Chat Entry
          • 🟩Decompress Voice Result
          • 🟩Float Stat
          • 🟩Game Server Item Wrapper
          • 🟩Game Server Player Details Wrapper
          • 🟩Global Achievement Status
          • 🟩Item Count
          • 🟩Item Detail
          • 🟩Item Detail With Properties
          • 🟩Item Price
          • 🟩Item With Price
          • 🟩Int Stat
          • 🟩Key Value Pair
          • 🟩Leaderboard Entry
          • 🟩Lobby Data
          • 🟩Lobby Game Server
          • 🟩Server Achievement Status
          • 🟩Server Stat Float Value
          • 🟩Server Stat Int Value
          • 🟩User Achievement Status
          • 🟩Voice Result
          • 🟩Voice Available Result
        • Enumerators
          • 🟨UEBeginAuthSessionResult
          • 🟨UEChatRoomEnterResponse
          • 🟨UEFriendFlags
          • 🟨UEChatEntryType
          • 🟨UEChatMemberStateChange
          • 🟨UELeaderboardDataRequest
          • 🟨UELeaderboardDisplayType
          • 🟨UELeaderboardSortMethod
          • 🟨UELobbyComparison
          • 🟨UELobbyDistanceFilter
          • 🟨UELobbyType
          • 🟨UEResult
          • 🟨UESteamCurrencyCode
          • 🟨UEServerMode
          • 🟨UEUserHasLicenseForAppResult
          • 🟨UEVoiceResult
      • C++
  • Toolkit for Physics
    • Unity
      • Installation
      • Core Features
        • Ballistics Tools
        • Buoyancy Tools
        • Force Effect Framework
        • Physics Data extended
        • Verlet Integration
      • Sample Scenes
        • Fantasy Style Ballistic Simulation
        • (3D) Deterministic Bounce Prediction
        • (2D) Deterministic Bounce Prediction
        • 1 Buoyancy Example
        • 1 Force Effect Fields
        • 2 Spherical Gravity
        • 3 Multi-body Gravity
        • 1 Verlet Spring Simple Transforms
        • 2 Verlet Spring Skinned Mesh
      • API
        • Ballistics
        • Buoyancy
        • Force Effects
        • Maths
        • Mesh Tools
      • Components
        • Ballistic Aim
        • Ballistic Path Line Render
        • Ballistic Path Follow
        • Buoyant Body
        • Buoyant Body Drag
        • Constant Acceleration
        • Constant Angular Velocity
        • Constant Linear Velocity
        • Force Effect Source
          • Force Effect Direction
          • Force Effect Field
        • Force Effect Reciever
        • Physics Data
        • Surface Tool
        • Trick Shot
        • Trick Shot Line
        • Verlet Spring
      • Objects
        • Force Effect
          • Attract Effect
          • Gravity Effect
          • Repulse Effect
          • Suspend Effect
          • Tractor Effect
          • Wind Effect
        • Point Volume
        • Verlet Hierarchy
        • Verlet Hierarchy Settings
        • Verlet Particle
      • Enums
        • Calculation Mode
  • Toolkit for UI & UX
    • Introduction
    • Unity
      • Installation
      • Learning
        • Sample Scenes
          • Command Parser Example
          • Cursor System Scene
          • Drag and Drop (Behaviours)
          • Drag and Drop (Inventory Example)
          • Drag and Drop (Spell Bar Example)
          • Log Sample Scene
          • Screenshot Sample Scene
        • Core Concepts
          • Command System
          • Cursor System
          • Drag and Drop System
          • Interaction Tools
          • Logging & Feedback
          • Scene Tools
          • Selection System
          • Tooltip System
          • Window System
        • uGUI Extras
          • Key Collection
          • Ligature Tools
          • Tree View Collection
      • API
        • Cursors
        • Json
        • Log
        • Scenes
        • Screenshot
        • Selection
        • Trello
        • Windows
      • Components
        • Action Hold
        • Border Handle
        • Button Cursor State
        • Change Cursor Default State
        • Command Director
        • Cursor Animator
        • Drag Item
        • Drop Container
        • Key Hold
        • Mouse Over Cursor State
        • Move Handle
        • Play On Click
        • Play On Demand
        • Play On Down
        • Play On Enter
        • Play On Exit
        • Play On Up
        • Pointer Hold
        • Scenes Manager
        • Selectable Object
        • Selection Manager
        • Tooltip Trigger
        • Tooltip Window Controller
        • Window
        • Window Clamping Bounds
        • Window Focus Change Event Data
      • Objects
        • Command Data
        • Command Library
        • Cursor Animation
        • Cursor State
        • DragAndDropItemChangeData
        • LogData
      • Enums
        • Clear Drop Behaviour
        • Drag Effect
        • Drag End Behaviours
        • Grab Handle
        • Mask Mode
        • Recieve Mode
        • Window Snap To Location
  • More Heathen Tools
    • 🎨Art Assets
      • Breakable
        • Wood Props
          • Installation
    • ⚙️System Core
      • Installation
      • Learning
        • Asset Developers
      • Command Line
      • Game Events
      • Scriptable Tags
      • Scriptable Variables
      • Heathen Behaviour
      • Heathen UI Behaviour
    • 📋Tips for Asset Developers
      • Editor Coroutines
      • Package Manger in C#
      • Session State Values
  • Codex
    • Introduction
      • Article Design Guide
        • Evolution
          • Early Period
          • Middle Period
          • Late Period
      • Codex Organization
    • Irish
      • Folklore
        • Introduction
        • Characters
          • Déithe
            • Cacht
            • Lugh
            • Dag Dia
              • Donn
              • Nuada
              • Ogma
            • Mother?
              • Banba
                • Appearance
                • Name
              • Érui
                • Appearance
                • Name
              • Fódla
                • Appearance
                • Name
            • Father ?
              • Éthur Mac Cuill
              • Céthur Mac Gréine
              • Téthur Mac Cecht
        • Concepts
          • Binding Tablet
          • Druids
          • Sociaty
          • Patron Gods
          • Bile
          • Time
        • Food
          • Elderberry Capers
          • Elderberry Wine
          • Mead
        • Peoples
          • Fomóire
          • Research Note
            • Hunter Gathers
            • Neolithic Farmers
            • Bronze Age
        • Locations
          • Lughmhagh
          • Temair
            • Name
      • Research
        • Historical Backdrop
        • Disambiguation
          • Banshee
          • Celt
          • Gods and Goddesses
          • Lebor Gabála Érenn
          • Milesians
          • Mother Goddess
          • Sovereignty Goddess
          • The Morrígan
          • Triple Persona
          • Tuatha Dé
          • Wicker Man Sacrafice
        • Links
          • Social Factors
          • Lugh
            • Name
          • Ogma
          • Astronomy
          • Time
        • Sources
        • WIP
          • Artefacts
          • Beings
            • Cannon
              • Belgae
              • Fomorians
              • Síog
              • Tuatha Dé Danann
            • Derivative
              • Milesians
              • Muintir Nemid
          • Characters
            • Cannon
            • Derivative
          • Concepts
          • Events
          • Languages
          • Music
          • Places
          • Sources
          • Stories
          • Styles
Powered by GitBook
On this page
  • Introduction
  • What can it do?
  • Max Range
  • Solution
  • Simple Trajectory
  • Variable Trajectory
  • Fixed Time
  • Fixed Angle
  • Raycast
  • SphereCast / CircleCast
  • Flight Time
  1. Toolkit for Physics
  2. Unity
  3. API

Ballistics

Like what you are seeing?

Support us as a GitHub Sponsor and get instant access to all our assets, exclusive tools and assets, escalated support and issue tracking and our gratitude. These articles are made possible by our GitHub Sponsors ... become a sponsor today!

Introduction

public static class Ballistics

Found in namespace:

using HeathenEngineering.UnityPhysics.API;

We recommend using aliases to reduce typing and simplify names.

using API = HeathenEngineering.UnityPhysics.API;

doing this you can fully qualify the name of this class as

API.Ballistics

This interface uses features derived from Forrest The Woods by Forrest Thomas Smith. https://github.com/forrestthewoods/lib_fts

What can it do?

Used to solve for ballistic (parabolic) trajectory solutions such as throwing a ball, shooting a cannon, etc. The features of this API can be used to find the proper angle to aim at to hit a given target or to find the velocity to launch a projectile at to achieve a desired arc

Max Range

The first step is typically to determine if the target is within range at all. We can find the max range of a ballistic system with

public static float MaxRange(
    float speed, //Speed of the projectile
    float gravity, //The magnitude of gravity (9.8f typically)
    float height) // > 0 hight difference from target

Solution

The main feature of the Ballistics API is the Solution method which comes in several overloads to meet any need.

Each method has an equivalent 2D variant. for example

3D Solution is

Solution(...)

2D Solution is

Solution2D(...)

Simple Trajectory

public static int Solution(
    Vector3 projectile, //The starting position of the projectile
    float speed, //The forward speed of the projectile
    Vector3 target, //The target position to reach
    float gravity, //The magnitude of gravity (9.8f typically)
    out Quaternion lowAngel, // Solution 1
    out Quaternion highAngle) // Solution 2

This overload returns an int ranging from 0 to 2 representing the number of valid solutions found. If the value is greater than 1 then there is at least 1 valid solution.

The valid solutions found will be expressed as rotations for a low-angle and high-angle trajectory.

public static int Solution(
    Vector3 projectile, //The starting position of the projectile
    float speed, //The forward speed of the projectile
    Vector3 target, //The target position to reach
    VEctor3 targetVelocity, //Target's velocity
    float gravity, //The magnitude of gravity (9.8f typically)
    out Quaternion lowAngel, // Solution 1
    out Quaternion highAngle) // Solution 2

The same as the previous overload only this overload takes a targetVelocity and can be used to target a moving object.

Variable Trajectory

While the above solutions are simple we often want to tailor the visuals of a parabolic trajectory such that the angle is not to high or flat and that the projectile has a fixed linear speed as if fired strait at the target. This is the more common solution for simulating say a bow shot where the archer will optimize flight time and range for the target.

public static bool Solution(
    Vector3 projectile, //The starting position of the projectile
    float linearSpeed, //Speed of projectile over ground
    Vector3 target, //Target position to reach
    float arcCeiling, //Max height of the arc to fire on
    out Vector3 firingVelocity, //The speed the projectile should launch at
    out float gravity) //The magnitude of gravity that should be applied to it

As with the previous solution there is an overload for targeting a moving target


public static bool Solution(
    Vector3 projectile, //The starting position of the projectile
    float linearSpeed, //Speed of projectile over ground
    Vector3 target, //Target position to reach
    Vector3 targetVelocity, //Targets velocity
    float arcCeiling, //Max height of the arc to fire on
    out Vector3 firingVelocity, //The speed the projectile should launch at
    out float gravity, //The magnitude of gravity that should be applied to it
    out Vector3 impactPoint) //Perdicted impact point 

These overloads return a boolean indicating whether or not a solution was found. If a solution is found then the firingVelocity and gravity output parameters will be populated.

Fixed Time

On occasion its important for gameplay that the projectile reaches its target at a specific time so we can use the following overload to find the launch velocity. Launch velocity indicates the direction and speed of the launch.

public static Vector3 Solution(
    Vector3 projectile, //The starting position of the projectile
    Vector3 target, //The target to reach
    float gravity, //The magnitude of gravity (9.2 typically)
    float flightTime) //The desired flight time

This overload outputs a velocity vector. If you need to know the rotation the object should be on you can do

var rotation = Quaternion.LookRotation(solution) * Vector3.Forward;

Fixed Angle

Some use cases require that you launch the projectile from a given angle and so you need to know what "speed" to launch the projectile at.

public static bool Solution(
    Vector3 projectile, //The starting position of the projectile
    Vector3 target, //The target to reach
    float angle, //The launch angle to use
    float gravity, //The magnitude of gravity
    out float speed) //The required launch speed of the projectile

Raycast

The raycast method can be used to trace a ballistic trajectory for a defined length and test for collision along the way. The resulting steps tested will be returned along with the final direction of the projection and any hit data found.

For 2D casts see Raycast2D

public static bool Raycast(
        Vector3 start, 
        Vector3 velocity, 
        Vector3 gravity, 
        float resolution, 
        float maxLength, 
        LayerMask collisionLayers, 
        out RaycastHit hit, 
        out List<(Vector3 position, Vector3 velocity, float time)> path, 
        out float distance)

This can be used to test for collision, draw trajectory arcs, plan for bounces, etc.

  • start The point at which the trajectory should start from

  • velocity The initial velocity of the projectile

  • gravity The gravity vector, you can read this from Unity via Physics.Gravity or provide your own

  • resolution The distance for each step of the traversal

  • maxLength the total length of the traversal before the process is stopped rather or not it reaches a collision point

  • collisionLayers The layers to check for collision on

  • hit If a hit occurs this will be populated with the data

  • pay A tuple defining each step along the path containing the position, velocity and total flight time up to this point

  • distance the total length of the path

SphereCast / CircleCast

Casts a ray marching a sphere or circle across the path. Works the same as the Raycast option but can account for the radius of the object which will pass along the path. This is the most common means to check the path of a projectile with a significant geometry such as a ball where as a bullet is often small enough that the faster Raycast method works fine.

public static bool SphereCast( //Or CircleCast for 2D
        Vector3 start, 
        Collider startCollider, 
        Vector3 velocity, 
        Vector3 gravity, 
        float radius, 
        float resolution, 
        float maxLength, 
        LayerMask collisionLayers, 
        out RaycastHit hit, 
        out List<(Vector3 position, Vector3 velocity, float time)> path, 
        out float distance)
  • start The position the trajectory will start from

  • startCollider This collider will be ignored for the first radius distance of the traverse and helps to avoid self-collision on secondary bounces. This is optional and can be null

  • velocity The initial velocity of the projectile

  • gravity The gravity vector to apply you can read this from Physics.Gravity or Physics2D.Gravity or provide your own

  • radius The radius of the sphere or circle to be cast

  • resolution The distance between each step of the traverse

  • collisionLayers The layers to check for collision on

  • hit If a hit occurs this will be populated with the data

  • pay A tuple defining each step along the path containing the position, velocity and total flight time up to this point

  • distance the total length of the path

Flight Time

Estimating flight time can be done with the projectile velocity, the height difference it must travel from start to end and the effect of gravity.

Note that this is an estimate assuming the projectile will travel the full length of a typical trajectory.

public static float FlightTime(
        Vector3 start, 
        Vector3 end, 
        Vector3 velocity, 
        Vector3 gravity)
PreviousAPINextBuoyancy

Last updated 1 year ago