users System
Tracks connected users in your A-Frame multiplayer scene using Colyseus.
Overview
The users system automatically maintains a list of all connected players. It listens to Colyseus events and updates when users join, leave, or change their data. When the multiplayer connection is ready, it also loads the players that are already in the world.
Getting the User List
const usersSystem = document.querySelector("a-scene").systems.users;
const users = usersSystem.getUsersList();
// users = [{id: 'abc123', username: 'Alice', el: <a-entity>, playerData: {...}}, ...]
Listening for Changes
document.querySelector("a-scene").addEventListener("users-changed", (evt) => {
const users = evt.detail.users;
console.log(`${users.length} users online`);
});
User Object
{
id: 'abc123', // Colyseus session ID
username: 'Alice', // Display name
el: <a-entity>, // A-Frame entity (may be null)
playerData: {...} // Colyseus player data (may be undefined)
}
API
getUsersList()
Returns array of all connected users.
const users = this.el.sceneEl.systems.users.getUsersList();
Event: users-changed
Fired on the scene when a user joins, leaves, or their data changes. The event does not bubble.
scene.addEventListener("users-changed", (evt) => {
const users = evt.detail.users;
});
Check if User is Online
const users = scene.systems.users.getUsersList();
const isOnline = users.some((u) => u.username === "Alice");
Notes
- User entities (
el) may benullif not yet spawned - Usernames are resolved from
playerData.userName,playerData.name,playerData.displayName, or the entity'splayer-infodisplay name, in that order. If none is set, the username isUser_followed by the first four characters of the session ID.