API
The Security Keypad system provides a public API that allows you to check player roles and permissions from your own Udon scripts.
Understanding Role Tags
The Security Keypad system uses two types of role tags:
Explicit Roles: Tags from roles the player has explicitly logged into, be by inputing a code, autologin or manually given by any system.
Implicit Roles: Tags given because you have been explicitly assigned to one of its parents. For example, if you have the VIP+ role assigned and said role has VIP as a child role, you will be given the VIP implicit tag.
These 2 lists combine into a single Roles list which is synchronized to remote users. This division its used internally to determine if you need to be logged out of a role, and can also be used by external systems to perform all kinds of checks depending on your needs.
Public Events
To recive events on your own Udon scripts, you need to first add your UdonBehaviour to the SecurityKeypad's Event Receivers list. You can do so manually in the inspector or by using the methods:
RegisterListener(UdonBehaviour listener)
UnregisterListener(UdonBehaviour listener)
Once registered, your Udon script can implement the following event methods:
- OnUserLogin(string playername, string rolename)
- OnUserLogout(string playername, string rolename)
- OnUserExplicitLogin(string playername, string rolename)
- OnUserExplicitLogout(string playername, string rolename)
Public API Methods
HasRole
The HasRole method checks if a player has one or more roles. This method has multiple overloads to provide flexibility in how you check roles.
Returns:
trueif the role condition is metfalseotherwise
Examples:
public SecurityKeypad keypad;
bool isAdmin = false;
void Start(){
//Check if the keypad reference is valid
if(!Utilities.IsValid(keypad)) return;
//Check if local player is admin
isAdmin = keypad.HasRole("Admin")
}
HasRole(KeyPadRol role)
Checks if the local player has logged into a specific role.
Signature:
public bool HasRole(KeyPadRol role)
Parameters:
role- The KeyPadRol component to check
HasRole(KeyPadRol[] roles, bool ImplicitOnly, bool All)
Checks if the local player has one or more roles from an array of KeyPadRol components.
Signature:
public bool HasRole(KeyPadRol[] roles, bool ImplicitOnly = false, bool All = false)
Parameters:
roles- Array of KeyPadRol components to checkImplicitOnly- Iftrue, only checks implicit role tags (default:false)All- Iftrue, requires all roles to match; iffalse, requires at least one (default:false)
HasRole(string role, bool ImplicitOnly)
Checks if the local player has a role by role name.
Signature:
public bool HasRole(string role, bool ImplicitOnly = false)
Parameters:
role- The role name or tag to checkImplicitOnly- Iftrue, only checks implicit role tags (default:false)
HasRole(VRCPlayerApi player, string role, bool ImplicitOnly)
Checks if a specific player has a role by role name.
Signature:
public bool HasRole(VRCPlayerApi player, string role, bool ImplicitOnly = false)
Parameters:
player- The player to checkrole- The role name or tag to checkImplicitOnly- Iftrue, only checks implicit role tags (default:false)
HasRole(string[] roles, bool ImplicitOnly, bool All)
Checks if the local player has one or more roles from an array of role names/tags.
Signature:
public bool HasRole(string[] roles, bool ImplicitOnly = false, bool All = false)
Parameters:
roles- Array of role names/tags to checkImplicitOnly- Iftrue, only checks implicit role tags (default:false)All- Iftrue, requires all roles to match; iffalse, requires at least one (default:false)
HasRole(VRCPlayerApi player, string[] roles, bool ImplicitOnly, bool All)
Checks if a specific player has one or more roles from an array of role names/tags.
Signature:
public bool HasRole(VRCPlayerApi player, string[] roles, bool ImplicitOnly = false, bool All = false)
Parameters:
player- The player to checkroles- Array of role names/tags to checkImplicitOnly- Iftrue, only checks implicit role tags (default:false)All- Iftrue, requires all roles to match; iffalse, requires at least one (default:false)
GetRoles
The GetRoles methods retrieve the role tags assigned to a player. These methods have multiple overloads for different use cases.
Returns:
DataListcontaining only explicit role tags for the player- Empty
DataListif system is not initialized or player data not found
GetRoles()
Gets all role tags assigned to the local player.
Signature:
public DataList GetRoles()
GetRoles(VRCPlayerApi player)
Gets all role tags assigned to a specific player.
Signature:
public DataList GetRoles(VRCPlayerApi player)
Parameters:
player- The player to get roles from
Behavior:
- Returns empty list if called before initialization (logs warning)
- Returns empty list if player data is not found
GetExplicitRoles()
Gets only the explicit role tags assigned to the local player (roles they logged into).
Signature:
public DataList GetExplicitRoles()
GetExplicitRoles(VRCPlayerApi player)
Gets only the explicit role tags assigned to a specific player.
Signature:
public DataList GetExplicitRoles(VRCPlayerApi player)
Parameters:
player- The player to get explicit roles from
Behavior:
- Returns empty list if called before initialization (logs warning)
- Returns empty list if player data is not found
- Only includes roles the player actively logged into, not passive/automatic roles
GetImplicitRoles()
Gets only the implicit role tags assigned to the local player (automatically assigned roles).
Signature:
public DataList GetImplicitRoles()
GetImplicitRoles(VRCPlayerApi player)
Gets only the implicit role tags assigned to a specific player.
Signature:
public DataList GetImplicitRoles(VRCPlayerApi player)
Parameters:
player- The player to get implicit roles from
Behavior:
- Returns empty list if called before initialization (logs warning)
- Returns empty list if player data is not found
- Only includes automatically assigned roles, not roles requiring explicit login
GetHighestRole
The GetHighestRole methods retrieve the highest priority role assigned to a player based on the role hierarchy.
Highest role is determined by the order in the hierarchy the roles are placed in, from top to bottom.
Returns:
KeyPadRolcomponent of the highest priority rolenullif player has no roles or system is not initialized
Example:
public KeyPad securityKeypad;
public void DisplayPlayerHighestRole(VRCPlayerApi targetPlayer)
{
KeyPadRol highestRole = securityKeypad.GetHighestRole(targetPlayer);
if (highestRole != null)
{
Debug.Log(targetPlayer.displayName + "'s highest role is: " + highestRole.rolName);
// Access role properties
string roleName = highestRole.rolName;
Color roleColor = highestRole.color;
}
else
{
Debug.Log(targetPlayer.displayName + " has no roles");
}
}
GetHighestRole()
Gets the highest role assigned to the local player.
Signature:
public KeyPadRol GetHighestRole()
GetHighestRole(VRCPlayerApi player)
Gets the highest role assigned to a specific player.
Signature:
public KeyPadRol GetHighestRole(VRCPlayerApi player)
Parameters:
player- The player to get the highest role from
GetRoleByName
Gets a KeyPadRol component by its role name.
Signature:
public KeyPadRol GetRoleByName(string roleName)
Parameters:
roleName- The name of the role to retrieve
Returns:
KeyPadRolcomponent with matching role namenullif role not found or system is not initialized
Behavior:
- Returns
nullif called before initialization (logs warning) - Searches through all role objects to find a matching name
- Case-sensitive name matching
GetRoleColor
The GetRoleColor methods retrieve the color of a player's highest role.
Returns:
Colorof the highest priority role.Color.whiteif player has no roles, system is not initialized, or player data not found.
Example:
public KeyPad securityKeypad;
public MeshRenderer playerNameplate;
void UpdateMyNameplateColor()
{
Color myRoleColor = securityKeypad.GetRoleColor();
// Apply role color to nameplate
playerNameplate.material.color = myRoleColor;
Debug.Log("My role color is: " + myRoleColor);
}
GetRoleColor()
Gets the color of the highest role assigned to the local player.
Signature:
public Color GetRoleColor()
GetRoleColor(VRCPlayerApi player)
Gets the color of the highest role assigned to a specific player.
Signature:
public Color GetRoleColor(VRCPlayerApi player)
Parameters:
player- The player to get the role color from
GetPlayersWithRole(KeyPadRol role, bool implicitOnly)
Gets a list of players who have a specific role.
Signature:
public VRCPlayerApi[] GetPlayersWithRole(KeyPadRol role, bool implicitOnly = false)
Parameters:
role- The KeyPadRol component to checkimplicitOnly- Iftrue, only considers implicit role tags (default:false)
Returns:
- Array of
VRCPlayerApiplayers who have the specified role - Empty array if no players have the role or system is not initialized