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
  • Steam Lobby
  • Lobby Types
  • Heathen Constant Data
  • Namespace
  • Definition
  • Events
  • evtFound
  • evtEnterSuccess
  • evtEnterFailed
  • evtCreated
  • evtCreateFailed
  • evtQuickMatchFailed
  • evtDataUpdated
  • evtLeave
  • evtAskedToLeave
  • evtGameCreated
  • evtUserJoined
  • evtUserLeft
  • Fields and Attributes
  • SearchArguments
  • CreateArguments
  • Lobby
  • HasLobby
  • IsPlayerOwner
  • AllPlayersReady
  • IsPlayerReady
  • Full
  • IsTypeSet
  • Type
  • MaxMembers
  • HasServer
  • GameServer
  • Methods
  • Set Type
  • Set Joinable
  • Quick Match
  • Create
  • Search
  • Join
  • Leave
  • Set Lobby Data
  • Set Member Data
  • Invite
  • Use
  • Player Party / Group
  • Game Lobby
  • Team Lobby
  • FAQ
  • Restrict Party Lobby
  • Lobby Chat
  1. Toolkit for Steamworks
  2. Unity
  3. Objects
  4. UI Components

Lobby Manager

Lobby management made easy

PreviousLobby Member SlotNextParty Lobby Control

Last updated 1 year ago

Like what your seeing?

Support us as a 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 ... become a sponsor today!

Introduction

This tool simply exposes features present in the API to the inspector.

This is not required to use these features it is simply a helper tool allowing user's who are more comfortable working with editor inspectors and game object rather than classic C# objects and scripting to make use of the related feature.

The Lobby Manager ... not to be confused with Steamworks V1 Lobby Manager ... is a tool for creating and managing a specific lobby.

This component is meant to be attached to a game object in your matchmaking scene / ui. Your game may have multiple Lobby Managers where each manages a single specific lobby.

The Lobby Manager is a simple Unity component (MonoBehaviour) that simplifies manging a specific lobby. That is this tool does not magically managage all lobbies it only manages the lobby it is connected to.

You connect a lobby to the LobbyManager by using the LobbyManager to create or join said lobby or by setting the LobbyManager.Lobby field to the lobby you want it to manage.

Steam Lobby

The feature of the Steam API is a flexible and powerful tool useful for far more than simple matchmaking. We find it best to think of a "lobby" more like a chat room with metadata. It does not have anything to do with networking, it doesn't have to relate to a game session or a game server.

Steam allows a player to be apart of up to 3 lobbies but has a few restrictions.

  • The player may only be apart of 1 "normal" lobby.

    Steam defines a normal lobby as any lobby which is not of type "Invisible"

  • The player may be apart of up to 2 "invisible" lobbies

    An indivisible lobby doesn't appear on player's rich presence or Friends list displays (Public and Friend Only do). It is however possible to search for invisible lobbies so you can allow player's to browse for them.

Lobby Types

The following explains; as clearly as Steam documentation allows, the available lobby types and when and how you might use them.

  • Private

    Classified as a "Normal" lobby by Steam.

    The only way to join a private lobby is to be invited to it via the Lobby.InvitePlayer feature. This can be useful in coop games when your player want to play with a specific friend but doesn't want to be bothered by requests to join or public searches.

    This lobby will not appear in searches, it will not appear on the user's friends list or rich presence data.

  • Friends Only

    Classified as a "Normal" lobby by Steam.

    This lobby can only be joined by friends of the owner or by people directly invited to it. This lobby does appear on the user's friends list but does not appear in lobby lists or searches. This is useful when the player wants friends to be able to drop in / out but doesn't want be bothered by random players.

  • Public

    Classified as a "Normal" lobby by Steam.

    This is the typical lobby you will see used in most games. Its the classic "Matchmaking" lobby that appears on the user's friends list and can be searched for and joined by any matching player.

  • Invisible

    This is the lobby type that Valve/Steam allows a user to be a member of 2 of

    This lobby is not visible in the friends list but can be searched for. That might be confusing at first read.

    A random user can search for this lobby as you would a public lobby but this lobby will not show up on the Steam Friends list hence "invisible"

Heathen Constant Data

Steam Lobby is a wonderful tool but it has a few glaring gaps that are often requested. To support the most commonly requested of these gaps Heathen has developed extensions of Steam Lobby.

We do this by managing lobby metadata.

It is possible to get this data out of sync if you use the raw Steam API. Using our API wrapper e.g. API.Matchmaking will preserve these values.

Namespace

using HeathenEngineering.SteamworksIntegration;

Definition

public class LobbyManager : MonoBehaviour

Events

You can add events via the Add New Event Type button in a manner similar to Unity's Event Trigger component. The names listed are slightly different from the names as they appear in code to help clarify the use of each when IntelliSense is not available as it is in code.

evtFound

public LobbyDataListEvent evtFound

Occurs when a search for matchmaking lobbies returns. The handler would be similar to the following.

private void Handler(LobbyData[] lobbies)
{
    //Do work
}

evtEnterSuccess

public LobbyDataEvent evtEnterSuccess

Occurs when the local user enters a lobby as the result of a join request. The handler would be similar to the following.

private void Handler(LobbyData lobby)
{
    //Do work
}

evtEnterFailed

public LobbyResponceEvent evtEnterFailed

Occurs when the local user attempts to enter a lobby but gets an invalid enter response. The handler would be similar to the following.

private void Handler(EChatRoomEnterResponse responce)
{
    //Do work
}

evtCreated

public LobbyDataEvent evtCreated

Occurs when a lobby is created. The handler would be similar to the following.

private void Handler(LobbyData lobby)
{
    //Do work
}

evtCreateFailed

public EResultEvent evtCreateFailed

Occurs when an attempt to create a lobby fails. The handler would be similar to the following.

private void Handler(EResult result)
{
    //Do work
    Debug.LogError($"Lobby Create failed with error code: {result}");
}

evtQuickMatchFailed

public UnityEvent evtQuickMatchFailed

Occurs when an attempt to find a quick match failed and was not allowed to create a lobby on completion. The handler would be similar to the following.

private void Handler()
{
    //Do work
}

evtDataUpdated

public LobbyDataUpdateEvent evtDataUpdated

Occurs when the lobby's metadata or the metadata on a lobby member is updated. The handler would be similar to the following.

private void Handler(LobbyDataUpdate_t dataUpdated)
{
    if(dataUpdated.m_ulSteamIDLobby == dataUpdated.m_ulSteamIDMember)
    {
        //It was lobby data that was updated
    }
    else
    {
        //It was this member that updated
        var member = new LobbyMember
                { 
                    lobby = dataUpdated.m_ulSteamIDLobby,
                    user = dataUpdated.m_ulSteamIDMember
                };
    }
}

evtLeave

public UnityEvent evtLeave

Occurs when the local user leaves the lobby. The handler would be similar to the following.

private void Handler()
{
    //Do work
}

evtAskedToLeave

public UnityEvent evtAskedToLeave

Occurs when the local user is asked to leave the lobby via the Kick system. The handler would be similar to the following.

private void Handler()
{
    //Do work
}

evtGameCreated

public GameServerSetEvent evtGameCreated

Occurs when the lobby owner set's the game server data on the lobby. This is raised on all members but not on the owner of the lobby. As the owner is the one that sets this they already know. The handler would be similar to the following.

private void Handler(LobbyGameServer server)
{
    //Do work
}

evtUserJoined

public UserDataEvent evtUserJoined

Occurs when the local user is a member of a lobby and a new user joins that lobby. The handler would be similar to the following.

private void Handler(UserData user)
{
    //Do work
}

evtUserLeft

public UserLeaveEvent evtUserLeft

Occurs when the local user is a member of a lobby and a fellow member leaves the lobby. The handler would be similar to the following.

private void Handler(UserLobbyLeaveData user)
{
    //Do work
}

Fields and Attributes

SearchArguments

public SearchArguments searchArguments;

The SearchArguments data type is an internal class:

[Serializable]
public class SearchArguments
{
    /// <summary>
    /// If less than or equal to 0 then we wont use the open slot filter
    /// </summary>
    public int slots = -1;
    public ELobbyDistanceFilter distance = ELobbyDistanceFilter.k_ELobbyDistanceFilterDefault;
    public List<NearFilter> nearValues = new List<NearFilter>();
    public List<NumericFilter> numericFilters = new List<NumericFilter>();
    public List<StringFilter> stringFilters = new List<StringFilter>();
}

The fields of the class are as follows

  • slots If less than or equal to 0 this will be ignored otherwise this will indicate the number of available slots resulting lobbies must have. For example if you wanted to find a lobby for you and 3 friends then you would provide a value of 4 in this field to return only lobbies that had 4 open slots.

    • Close Only in the same Valve region as this user

    • Default In the same or near by Valve region as this user

    • Far Up to half a world away

    • World Wide No filtering at all

  • numericFilters Instructs the search to perform a numeric filtering operation on these fields and can filer by the following methods

    • Equal to or Less than

    • Less than

    • Equal

    • Greater than

    • Equal to or Greater thhan

    • Not Equal

  • stringFilter Instructs the search to perform a string filtering operation on these fields and can be filtered by the same methods as numeric filters. Valve doesn't explain what the result of each is so test to confirm desired results.

CreateArguments

public CreateArguments createArguments;

The CreateArguments data type is an internal class:

[Serializable]
public class CreateArguments
{
    public UseHintOptions usageHint;
    public string name;
    public int slots;
    public ELobbyType type;
    public List<MetadataTempalate> metadata = new List<MetadataTempalate>();
}

the fields of the class are as follows

  • usageHint This simply indicates what the intended use is for the lobbies created by this instance of the lobby manager. If set to a value other than "None" it will cause the Lobby Manager on Create of a new lobby to set that lobby as either Group or Session depending on the value you set here.

  • name This will be set as metadata on the lobby when created e.g. MyLobby["name"] = value;

  • slots This is the maximum number of slots this lobby will have ... this is including the owner of the lobby.

  • metadata Metadata fields to be set on the lobby once created. This is a simple string key and string value pairing. Metadata is what is used when "filtering" or "searching" for lobbies.

Lobby

public LobbyData Lobby { get; set; }

The lobby the manager is currently managing. This will automatically be updated when you use the lobby manager to create, join or leave a lobby. If you create, join or leave a lobby from outside the manager then you should update this field accordingly.

HasLobby

public bool HasLobby => get;

True if the manager is managing a lobby, false otherwise.

IsPlayerOwner

public bool IsPlayerOwner => get;

True if the local user is the owner of the managed lobby, false otherwise.

AllPlayersReady

public bool AllPlayersReady => get;

True if all members of the lobby have marked them selves as ready, otherwise false.

IsPlayerReady

public bool IsPlayerReady { get; set; }

Returns true if the player has marked them self as ready on this lobby. This can be set to mark the player as ready or not on this lobby.

Full

public bool Full => get;

Returns true if the lobby is currently full, false otherwise.

IsTypeSet

public bool IsTypeSet => get;

Returns true if the lobby type has been recorded on the lobby metadata, false otherwise.

Type

public ELobbyType Type { get; set; }

Returns the type of lobby this lobby is set to, this is a feature of Heahten's Lobby tools. Valve does not actually expose this so this will only work for lobbies created by Heathen's tools such as the lobby manager or the API.Matchmaking class. This can only be set by the owner of the lobby.

MaxMembers

public int MaxMembers { get; set; }

Indicates the max number of members that can be in the lobby. This can be set by the owner of the lobby to change the max slots.

HasServer

public bool HasServer => get;

Returns true if the lobby has had its game server set, false otherwise.

GameServer

public LobbyGameServer GameServer => get;

Returns data about the game server set on the lobby if any.

Methods

Set Type

public bool SetType(ELobbyType type);

Set Joinable

public bool SetJoinable(bool makeJoinable);

Sets the lobby if any, as joinable or not

Quick Match

public void QuickMatch(bool createOnFail = true);

Searches for a match based on the Search Arguments set on the object. If a match is found it will join that first lobby. If no match is found and createOnFail is set to true then the process will create a new lobby. If no match is found and createOnFail is set to false then the process will invoke the Quick Match Failed event.

Create

public void Create();

Creates a new lobby with the data found in the Create Argument.

Search

public void Search(int maxResults);

Searches for lobbies that match the Search Arguments set on the object. This will always invoke the evtFound event which will pass in an array of the lobby found if any.

Join

public void Join(LobbyData lobby);
public void Join(ulong lobby);
public void Join(string lobbyIdAsString);

The string paramiter version only exists so that Unity Inspector can work with the method when using Unity Actions (such as button click). Unfortunetly Unity in all of its wizdome decided that ulong and really anything other than float, int and string cannot be used as paramiters for methods.

You should only use this overload when using Unity Inspector and you should insure that the value is a valid ulong.

Joins the indicated lobby

Leave

public void Leave();

Does what it says on the tin and simply leaves the lobby clearning the managed lobby ID in the process.

Set Lobby Data

public bool SetLobbyData(string key, string value);

If the local user is the owner of the lobby this will set the related metadata field on the lobby. Otherwise this returns false.

Set Member Data

public SetLobbyMemberData(string key, string value);

If in a lobby this will set the user's metadata value corasponding to this key.

Invite

public bool Invite(UserData user);

Invites the user to the lobby

Use

Player Party / Group

Want to create a party system where player's can invite there friends before finding a match ... similar to what you see in DOTA, TF2, CSGO, etc.?

Create a UI to show your party members and to help the user send invites to or join friend's existing lobbies. You will use a Lobby Manager to help you manage this "party lobby" for example, as this is a "party lobby" you will want it to be of type "Invisible" and so would set the Create Arguments accordingly.

Want to enable a party chat on this lobby?

Simple add a Lobby Chat Director to the same game object you applied the Lobby Manager to, this Chat Director component will help you manage chat for this specific lobby.

Game Lobby

What to start a match / battle / session, that is you want to gather together players based on some matchmaking logic to start a gameplay session?

Create a UI to show your player there search and creation options and use a Lobby Manager to help you manage this "game lobby". In this case you probably want this to be a public lobby or perhaps you will let the player create friends only, private, etc. types of lobbies.

Want to enable lobby chat?

Simply add a Lobby Chat Director to the same game object you applied the Lobby Manager to, this Chat Director componenet will help you manage chat for this specific lobby.

Team Lobby

Some games use teams which allow a subset of the matched players to chat and update make decisions in a way that can only be seen by there fellow team mebers. You can think of this as a "sub lobby" to a typical "Game Lobby".

To do so, create your Team UI and apply a Lobby Manager to it, this lobby manager will be set to Type Invisible and can have its own Lobby Chat Director to enable team chat. Your Game Lobby will be used to assign player's to teams and provide them with the nessisary information to join the appropreate team.

FAQ

Restrict Party Lobby

A party lobby is typically of type Invisible, this type of lobby does apper in lobby searches. The simplest way to remove them from a search is to filter on Lobby.DataType aka "z_heathenType".

  • 0 = Private

  • 1 = Friends Only

  • 2 = Public

  • 3 = Invisible

The Type feild on the Lobby and the Lobby Manager will reutrn the current type if known, if not known it will return a default of 0 = private. You can use Lobby.IsTypeSet or LobbyManager.IsTypeSet to determin if the value is known.

Lobby Chat

You can learn more about these extension features in the article.

Learn more about in Valve's documentation .

Used with any form of search performed through the Lobby Manager including the and methods. This is used to define the "search arguments" e.g. the rules to be tested when searching for lobbies.

distance An enumerator that indicates the max alowed distance between the searching user and the members of the resulting lobbies. For more details on the values see , in summary

nearValues Key value pairs that the system should search for "near by" values for. See on this feature for more details. In summary this doesn't "filter out" lobbies but rather effects the sorting, the closer a lobby's metadata is to matching this value the higher it will be sorted in the resulting list. This is useful for say "Player Rank" whose min and max player rank is as near the player's actual rank as possible. To do this you could set near values of minRank = myRank and maxRank = myRank this would not exclude any lobbies in and of its self but would sort lobbies such that top results where nearest "my rank" ... this assumes minRank is the rank of the lowest ranked player in that lobby and maxRank is the rank of the highhest ranked player in that lobby

Used by the Lobby Manager any time a lobby is created with it, this would apply to as well as when no lobby is found and create on fail is set to true.

type The type of lobby to create, you can learn more about the .

Funcitonally the same as setting the Type field. This updates the type of the lobby on Valve's backend and updated the value of DataType. See the object article for more information on DataType.

To learn more about Heathen Constant Data such as DataType pleaes read the object article.

The DataType matadata value is the enumerator value of each of the Steam e.g.

See the componenet for details

GitHub Sponsor
GitHub Sponsors
Steam Lobby
Lobby
EResult
here
Valve's documentation on ELobbyDistanceFilter
Valve's documentation
Lobby
Lobby
ELobbyTypes
Lobby Chat Director
Search
QuickMatch
Create
QuickMatch
available types above
Page cover image