Hook
Hooks appear as properties on several objects. Similar to Events, functions may be registered that will be called whenever that hook is fired, but Hooks allow those functions to modify the parameters given to them. For example player.movementHook:Connect(OnPlayerMovement) calls the function OnPlayerMovement each tick, which may modify the direction in which a player will move.
Functions
| Function Name | Return Type | Description | Tags | 
|---|---|---|---|
| Connect(function hookListener, [...]) | HookListener | Registers the given function which will be called every time the hook is fired. Returns a HookListener which can be used to disconnect from the hook or change the listener's priority. Accepts any number of additional arguments after the listener function, those arguments will be provided after the hook's own parameters. | None | 
Examples
Example using:
Connect
 How to reverse a player's walking direction.
local function OnMovement(player, params)
    params.direction = -params.direction
end
Game.GetLocalPlayer().movementHook:Connect(OnMovement)
See also: Player.movementHook
Example using:
Connect
 An example of how to implement "Click to Move" in your game, useful in conjunction with a top down camera. This client script detects mouse clicks with the OnActionPressed function and saves the clicked point as the goal. Then, in the OnPlayerMovement function the goal is used to recalculate the player's move direction.
UI.SetCursorVisible(true)
UI.SetCanCursorInteractWithUI(true)
local PLAYER = Game.GetLocalPlayer()
local STOP_THRESHOLD = 120*120
local goal = nil
function OnPlayerMovement(player, params)
    if goal and params.direction == Vector3.ZERO then
        local playerPos = player:GetWorldPosition()
        local direction = goal - playerPos
        if direction.sizeSquared < STOP_THRESHOLD then
            goal = nil
        else
            CoreDebug.DrawLine(playerPos, goal, {thickness = 15, color = Color.New(1, .5, 0)})
            direction = direction * Vector3.New(1, 1, 0)
            params.direction = direction:GetNormalized()
        end
    else
        goal = nil
    end
end
function OnActionPressed(player, action)
    if action == "Shoot" then
        local hitResult = UI.GetCursorHitResult()
        if hitResult then
            goal = hitResult:GetImpactPosition()
        end
    end
end
PLAYER.movementHook:Connect(OnPlayerMovement)
Input.actionPressedEvent:Connect(OnActionPressed)
See also: Input.actionPressedEvent | Player.movementHook