Team Manager
Updated May 25, 2026
The Team Manager provides team creation, team assignment, balancing, lobby team persistence, AI team handling, team colors, free-for-all support, and integration with Player Manager, Score Manager, Session Manager, and Game Mode System.
Player Manager is required. Set up Player Manager first, then Team Manager. Team Manager binds to Player Manager join, leave, and rejoin events so it can assign players, remove players, and restore teams reliably. For shared setup guidance, see the Migration Guide and Integration Guide. Use the System Atlas to look up functions, variables, events, components, and ownership references.
Related Video
Some videos may have been recorded before V4. The same principles still apply, but asset names, component names, and folder locations may differ. Use this written page and the current V4 names as the source of truth.
Player Manager for Team Games Devlog Play
System Role
The Team Manager is the central authority for team structure. It creates teams, assigns players, tracks members, balances teams, supports team switching, and persists lobby teams into gameplay.

| System | Relationship to Team Manager |
|---|---|
| Player Manager | Required. Provides player join, leave, and rejoin events plus connected player data. |
| Score Manager | Optional. Uses Team Manager data for team scores and team member lists. Score Manager owns score tracking. |
| Game Mode System | Optional. Uses teams for Team Deathmatch, Domination, Capture the Flag, Search and Destroy, team spawning, and win conditions. |
| Session Manager | Optional. Supports lobby team selection and persistence from lobby to gameplay through Game Instance storage. |
Recommended GameState component order from the source document:
- AC_SessionManager
- AC_GS_ScoreManager if used
- AC_GS_TeamManager
- AC_PlayerManager
AC_GS_TeamManager should be above Player Manager so it can bind to Player Manager events.
Core Components
AC_GS_TeamManager
AC_GS_TeamManager lives on the GameState and manages global team state on the server. It creates teams, deletes teams, assigns and removes players, balances teams, assigns AI, removes AI when real players join, saves/restores lobby teams, and broadcasts team change events.
| Setting | Purpose |
|---|---|
| Maximum Teams | Maximum number of teams allowed. |
| Amount of Teams to Create Initially | Number of teams created on level load. If 0, teams can be created on demand. |
| Automatically Assign New Players to Team | Assign players when they join. If false, players require manual team selection. |
| Maximum Team Members | Maximum members per team, such as 4 for squads or 8 for team games. |
| Maximum Team Balance Difference | Maximum player-count difference allowed during auto-assignment. |
| Balance Teams | Balance teams during assignment instead of filling teams in order. |
| Add All Players to One Team | Free-for-all mode structure: one team contains all players. |
| Allow Friendly Fire | Allows same-team damage. Required for free-for-all behavior when all players are in one team. |
| Own Team Color | Color used for the player’s own team in UI, outlines, or indicators. |
| Opposite Team Color | Color used for enemy teams in UI, outlines, or indicators. |
AC_PS_Team
AC_PS_Team lives on the PlayerController. It stores the player’s replicated TeamIndex, supports team switch requests through server RPC, and gives quick access to the player’s current team without looping through all teams.
- TeamIndex 0: Team A.
- TeamIndex 1: Team B.
- TeamIndex 2+: additional teams.
- TeamIndex -1: not assigned.
Team Data
F_Team_Info
F_Team_Info is the team data structure used by Team Manager.
| Field | Purpose |
|---|---|
| Team Name | Human-readable name such as Team A, Team B, Red Team, Blue Team, or Alpha Squad. |
| Team Tag | Gameplay tag identifier such as Team.0, Team.1, Team.2, Team.3, Team.4, or custom tags such as Team.Custom.Red. |
| Members | Array of player names from PlayerState/GetPlayerName, including AI names if AI is assigned to teams. |

Teams can be identified by index, tag, or name. Use index for fast access, gameplay tags for filtering or game logic, and names for UI display.
Team Creation and Assignment
Teams can be created initially, on demand, or manually.

- Initial creation: create a configured number of teams on level load.
- On-demand creation: create the first needed team when players join and no teams exist.
- Manual creation: create teams from gameplay code, interaction pads, or custom UI.
When a player joins, Team Manager receives the Player Manager join event. If auto-assignment is enabled, it assigns the player to a valid team. If balancing is enabled, it chooses a team that keeps the member count within the configured balance difference. If auto-assignment is disabled, the player remains unassigned until a manual selection happens.

Team-Based and Free-for-All Modes
| Mode | Configuration | Behavior |
|---|---|---|
| Team-based | Amount of Teams to Create Initially: 2+; Add All Players to One Team: False. | Players are distributed across teams for Team Deathmatch, Domination, Capture the Flag, and Search and Destroy. |
| Free For All | Add All Players to One Team: True; Allow Friendly Fire: True. | All players are structurally in one team for scoreboard/system support, but can damage each other and use individual win logic. |
| Battle Royale squads | Multiple teams with Maximum Team Members commonly set to squad size. | Players are grouped into squads while game mode logic handles survival/winner rules. |
Balancing and Capacity
Maximum Team Members prevents a team from exceeding its capacity. Maximum Teams caps how many teams can exist. Maximum Team Balance Difference controls how far apart team sizes can drift during auto-assignment.
Balancing only applies to auto-assignment. Manual team switching or manual assignment can be validated by server-side logic and custom UI rules.
- If Balance Teams is true, players are assigned to the team with fewer members where possible.
- If Balance Teams is false, teams can be filled in order.
- Force Rebalance can redistribute players when teams are already uneven.
- If all teams are full, OnPlayerJoinedButFullTeams can notify gameplay or UI logic.
AI Handling
Team Manager can assign AI to teams and remove AI when real players join. This supports modes that fill empty slots with AI while still allowing real players to replace AI later.
- A player joins.
- The manager checks whether teams are full with AI members.
- If needed, one AI is removed from a team.
- The real player is assigned to that team.
- Total team capacity stays valid.
Lobby Team Persistence
Lobby team selection can persist into gameplay through Game Instance storage.

- Players select teams in the lobby.
- Team data is saved to Game Instance.
- The gameplay level loads.
- Team Manager restores team assignments from Game Instance.
- Assignments can persist across multiple games in a playlist.
Team Switching
Players can switch teams during lobby or gameplay if the mode allows it. Interaction Pads in the example level demonstrate manual selection, and custom UI can provide the same behavior through AC_PS_Team and server validation.
Server validation should check whether switching is allowed, whether the target team exists, whether it has capacity, and whether the switch violates balance rules.
Events
| Event | Use |
|---|---|
| OnTeamInfoChanged | Broadcast when team membership or team information changes. Use it to refresh UI, scoreboard, spawn logic, or game mode logic. |
| OnPlayerJoinedButFullTeams | Broadcast when a player joins but no team slot is available. Use it to show UI feedback, trigger AI replacement, or handle fallback logic. |
Integration Notes
- Player Manager: Team Manager binds to join, dropped, and rejoined events. It uses the connected player list and restores team state where possible.
- Score Manager: Team Manager provides team membership and team structure; Score Manager tracks actual scores.
- Game Mode System: Team Deathmatch, Domination, Capture the Flag, Search and Destroy, and similar modes use team assignments for win checks, spawning, scoring, and objectives.
- Session Manager: Lobby team selection can be stored and restored across travel and playlist games.
Common Configurations
| Use case | Typical settings |
|---|---|
| Team Deathmatch | 2 initial teams, auto-assign true, balance true, max balance difference 1, max members based on player count. |
| Free For All | Add All Players to One Team true, Allow Friendly Fire true, individual scoring handled by game mode. |
| Battle Royale Squads | Multiple teams, Maximum Team Members set to squad size, balancing enabled as needed. |
| Lobby Team Selection | Auto-assignment optional, manual switching enabled, teams saved to Game Instance and restored in gameplay. |
Workflows
Set Up Team Manager
- Set up Player Manager first.
- Add AC_GS_TeamManager to the GameState above AC_PlayerManager.
- Add AC_PS_Team to the PlayerController.
- Configure maximum teams, initial teams, maximum members, balancing, auto-assignment, colors, and FFA settings as needed.
- Run a multiplayer test and verify player join, assignment, leave, rejoin, and UI updates.
Create Custom Teams
- Define custom team tags, such as Team.Custom.Red, Team.Custom.Blue, Team.Custom.Green, or Team.Custom.Yellow.
- Create teams manually with the desired name and tag.
- Assign players automatically or through manual UI.
- Validate team capacity and balance rules on the server.
Implement Team Selection UI
- Create a team selection widget such as BP_TeamSelection.
- Populate the team list from Team Manager data.
- Add join buttons for each available team.
- Call the server-side team switch flow through the player team component.
- Refresh the UI when OnTeamInfoChanged fires.
Summary
AC_GS_TeamManager owns team structure and server-side assignment. AC_PS_Team stores each player’s replicated team index and supports player-side team switching. Player Manager is required for join/leave/rejoin events, while Score Manager, Session Manager, and Game Mode System consume team data for scoring, lobby persistence, team-based gameplay, and win conditions.