Controllers

In the Character Controller Library (CCL), a core ControllerManager instance handles the physical simulation of the character and its interaction with the environment. This includes several intentional changes in movement/feel designed to resolve legacy Humanoid inconsistencies, as well as physical improvements like ground friction, linear acceleration curves, and realistic conservation of linear and angular momentum when jumping.

Enable CCL

The CCL is opt-in through Studio's Avatar Settings window. To enable it:

  1. From the Avatar tab, open Avatar Settings.

    Avatar Settings indicated in Studio's toolbar
  2. Select the Movement tab on the left side of the window and, in the Abilities section, select Character Controller Library.

    Character Controller Library toggle in the Avatar Settings window
  3. All of the standard abilities like Running, Jumping, and Climbing are enabled by default. To disable any of them at runtime, uncheck the associated box.

Structure

Under the core ControllerManager instance within the character model, individual controllers such as a GroundController and AirController define how movement is applied to the character. Abilities then interact with the ControllerManager and its descendants to modify controller behaviors or switch between controllers.

Configuration

While your game is running (or through a script that runs from ServerScriptService), you can experiment with the core ControllerManager and built‑in controllers.

Runtime

To experiment with controller configurations at runtime:

  1. Begin a playtest.

  2. In the Explorer, locate the character model in the Workspace and then expand the ControllerManager tree:

  3. Select either the ControllerManager or one of its controller descendants and, in the Properties window, customize properties such as those summarized in the tables below (note that these tables are not exhaustive; please consult the API classes documentation for additional property options).

    PropertyDescription
    BaseMoveSpeedThe base linear movement speed used by all controllers. Controllers individually customize movement speed through their MoveSpeedFactor property.
    BaseTurnSpeedThe base angular turning speed used by all controllers to align the character to face the desired direction. Some controllers individually customize turn speed through their TurnSpeedFactor property.
    UpDirectionVector3 which indicates the upward-facing vector for the ControllerManager.RootPart.

Scripted

To set controller configurations for all characters through a script:

  1. Create a new server-side Script within ServerScriptService and rename it to ControllerScript.

  2. Copy and paste the following code into the new script. This example increases ground‑based moving/turning speed as well adds a slight acceleration and deceleration time. Feel free to adjust other properties such as those described in the tables above or for each class as documented (ControllerManager; GroundController; AirController; ClimbController; SwimController).

    Script in ServerScriptService

    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local ControllerManager = character:FindFirstChildWhichIsA("ControllerManager")
    if ControllerManager then
    local GroundController = ControllerManager:FindFirstChild("GroundController")
    if GroundController then
    -- Double the move and turn speeds
    GroundController.MoveSpeedFactor *= 2
    GroundController.TurnSpeedFactor *= 2
    -- Add slight acceleration and deceleration
    GroundController.AccelerationTime = 0.2
    GroundController.DecelerationTime = 0.4
    end
    end
    end
    local function onPlayerAdded(player)
    if player.Character then
    onCharacterAdded(player.Character)
    end
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.