Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.
ControllerPartSensor
Inherits from: ControllerSensor → SensorBase → Instance → Object
A SensorBase that outputs data about another BasePart based on Humanoid floor and ladder detection logic. It is primarily used for sending data to a character controller. Using a ControllerPartSensor allows you to detect BaseParts in the same manner as the Humanoid uses for detecting floors and ladders.
Inherits from: ControllerSensor
Memory category: Instances
Properties
| Name | Type / Returns | Description |
|---|---|---|
| ControllerPartSensor.HitFrame | CFrame | The position in world space where the sensor hit the ControllerPartSensor.SensedPart. |
| ControllerPartSensor.HitNormal | Vector3 | The surface normal at the position where the sensor hit the ControllerPartSensor.SensedPart. |
| ControllerPartSensor.LadderSearchHeight | float | The upper bound, in studs, of the vertical region the sensor searches for a ladder when ControllerPartSensor.SensorMode is set to a ladder mode. |
| ControllerPartSensor.LadderSearchOffset | float | The downward offset, in studs, that positions the vertical region the sensor searches for a ladder when ControllerPartSensor.SensorMode is set to a ladder mode. |
| ControllerPartSensor.SearchDistance | float | The distance from the sensor's parent BasePart to use when sensing other parts. |
| ControllerPartSensor.SensedMaterial | Material | The surface Material of the ControllerPartSensor.SensedPart that the sensor is currently detecting. |
| ControllerPartSensor.SensedPart | BasePart | A reference to the BasePart hit by the sensor. |
| ControllerPartSensor.SensorMode | SensorMode | Determines what behavior this SensorBase uses when sensing other parts. |
Inherited from SensorBase
| Name | Type / Returns | Description |
|---|---|---|
| SensorBase.UpdateType | SensorUpdateType | Determines how the sensor will update its output data. |
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.Archivable | boolean | Determines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published. |
| Instance.archivable | boolean | |
| Instance.Capabilities | SecurityCapabilities | The set of capabilities allowed to be used for scripts inside this container. |
| Instance.IsInSandbox | boolean | Indicates whether the instance is inside a sandboxed container. |
| Instance.Name | string | A non-unique identifier of the Instance. |
| Instance.Parent | Instance | Determines the hierarchical parent of the Instance. |
| Instance.PredictionMode | PredictionMode | Reflects the client-side prediction mode applied to the instance under server-authoritative physics. |
| Instance.RobloxLocked | boolean | A deprecated property that used to protect CoreGui objects. |
| Instance.Sandboxed | boolean | When enabled, the instance can only access abilities in its Capabilities list. |
| Instance.UniqueId | UniqueId | A unique identifier for the instance. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.ClassName | string | A read-only string representing the class this Object belongs to. |
| Object.className | string |
ControllerPartSensor.HitFrame
The position in world space where the sensor hit the ControllerPartSensor.SensedPart.
| Field | Value |
|---|---|
| type | CFrame |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Output |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
ControllerPartSensor.HitNormal
The surface normal at the position where the sensor hit the SensedPart.
| Field | Value |
|---|---|
| type | Vector3 |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Output |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
ControllerPartSensor.LadderSearchHeight
Top of the vertical extent the sensor scans for a climbable ladder, in studs relative to the sensor's parent BasePart. Together with ControllerPartSensor.LadderSearchOffset, it defines the height range: the region extends upward to LadderSearchHeight minus LadderSearchOffset.
Defaults to 6; clamped to non-negative values.
Only affects sensing when ControllerPartSensor.SensorMode is a ladder mode such as SensorMode.Ladder. Because SensorMode defaults to SensorMode.Floor, this has no effect until SensorMode is changed.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Input |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
ControllerPartSensor.LadderSearchOffset
Downward offset, in studs relative to the parent BasePart, that positions the vertical extent scanned for a climbable ladder. Behaves like a hip-height offset: increasing it lowers both the bottom and top of the searched region, and scales the rung-spacing tolerance used to decide whether a surface is climbable.
Defaults to 5; clamped to non-negative values.
Only affects sensing when ControllerPartSensor.SensorMode is a ladder mode such as SensorMode.Ladder. Because SensorMode defaults to SensorMode.Floor, this has no effect until SensorMode is changed.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Input |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
ControllerPartSensor.SearchDistance
The distance from the sensor's parent BasePart to use when sensing other parts.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Input |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
ControllerPartSensor.SensedMaterial
Surface Material of the part the sensor currently detects, matching the material Humanoid floor and ladder detection report for the same contact. Updated as an output alongside ControllerPartSensor.SensedPart, ControllerPartSensor.HitFrame, and ControllerPartSensor.HitNormal each time the sensor senses.
Defaults to Material.Air.
| Field | Value |
|---|---|
| type | Material |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Data |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
ControllerPartSensor.SensedPart
A reference to the BasePart hit by the sensor.
| Field | Value |
|---|---|
| type | BasePart |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Output |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
ControllerPartSensor.SensorMode
Determines what behavior this SensorBase uses when sensing other parts.
A setting of SensorMode.Ladder performs the same ladder detection logic used by a Humanoid to populate sensor output. It currently always senses along the forward vector of its parent BasePart.
A setting of SensorMode.Floor performs the same floor detection logic used by a Humanoid to populate sensor output. It currently always senses along the negative up vector of the world.
| Field | Value |
|---|---|
| type | SensorMode |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Input |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Basic"] |
| simulationAccess | true |
Methods
Inherited from SensorBase
| Name | Type / Returns | Description |
|---|---|---|
| SensorBase:Sense | () | Recomputes the sensor's output properties immediately. |
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance:AddTag | () | Applies a tag to the instance. |
| Instance:children | Instances | Returns an array of the object's children. |
| Instance:ClearAllChildren | () | This method destroys all of an instance's children. |
| Instance:Clone | Instance | Create a copy of an instance and all its descendants, ignoring instances that are not Archivable. |
| Instance:clone | Instance | |
| Instance:Destroy | () | Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children. |
| Instance:destroy | () | |
| Instance:FindFirstAncestor | Instance? | Returns the first ancestor of the Instance whose Instance.Name is equal to the given name. |
| Instance:FindFirstAncestorOfClass | Instance? | Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className. |
| Instance:FindFirstAncestorWhichIsA | Instance? | Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstChild | Instance? | Returns the first child of the Instance found with the given name. |
| Instance:findFirstChild | Instance | |
| Instance:FindFirstChildOfClass | Instance? | Returns the first child of the Instance whose ClassName is equal to the given class name. |
| Instance:FindFirstChildWhichIsA | Instance? | Returns the first child of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstDescendant | Instance? | Returns the first descendant found with the given Instance.Name. |
| Instance:GetActor | Actor? | Returns the Actor associated with the Instance, if any. |
| Instance:GetAttribute | Variant | Returns the value which has been assigned to the given attribute name. |
| Instance:GetAttributeChangedSignal | RBXScriptSignal | Returns an event that fires when the given attribute changes. |
| Instance:GetAttributes | Dictionary | Returns a dictionary of the instance's attributes. |
| Instance:GetChildren | Instances | Returns an array containing all of the instance's children. |
| Instance:getChildren | Instances | |
| Instance:GetDebugId | string | Returns a coded string of the debug ID used internally by Roblox. |
| Instance:GetDescendants | Instances | Returns an array containing all of the descendants of the instance. |
| Instance:GetFullName | string | Returns a string describing the instance's ancestry. |
| Instance:GetStyled | Variant | Returns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified. |
| Instance:GetStyledPropertyChangedSignal | RBXScriptSignal | Returns an event that fires when the given style property changes on the instance. |
| Instance:GetTags | Array | Gets an array of all tags applied to the instance. |
| Instance:HasTag | boolean | Check whether the instance has a given tag. |
| Instance:IsAncestorOf | boolean | Returns true if an Instance is an ancestor of the given descendant. |
| Instance:IsDescendantOf | boolean | Returns true if an Instance is a descendant of the given ancestor. |
| Instance:isDescendantOf | boolean | |
| Instance:IsPropertyModified | boolean | Returns true if the value stored in the specified property is not equal to the code-instantiated default. |
| Instance:QueryDescendants | Instances | Returns an array containing all descendants of the instance that match the selector string. |
| Instance:Remove | () | Sets the object's Parent to nil, and does the same for all its descendants. |
| Instance:remove | () | |
| Instance:RemoveTag | () | Removes a tag from the instance. |
| Instance:ResetPropertyToDefault | () | Resets a property to its default value. |
| Instance:SetAttribute | () | Sets the attribute with the given name to the given value. |
| Instance:WaitForChild | Instance | Returns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object:GetPropertyChangedSignal | RBXScriptSignal | Get an event that fires when a given property of the object changes. |
| Object:IsA | boolean | Returns true if an object's class matches or inherits from a given class. |
| Object:isA | boolean |
Events
Inherited from SensorBase
| Name | Type / Returns | Description |
|---|---|---|
| SensorBase.OnSensorOutputChanged | Fires when one of the sensor's output properties changes value. |
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.AncestryChanged | Fires when the Instance.Parent property of this object or one of its ancestors is changed. | |
| Instance.AttributeChanged | Fires whenever an attribute is changed on the Instance. | |
| Instance.ChildAdded | Fires after an object is parented to this Instance. | |
| Instance.childAdded | ||
| Instance.ChildRemoved | Fires after a child is removed from this Instance. | |
| Instance.DescendantAdded | Fires after a descendant is added to the Instance. | |
| Instance.DescendantRemoving | Fires immediately before a descendant of the Instance is removed. | |
| Instance.Destroying | Fires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy(). | |
| Instance.StyledPropertiesChanged | Fires whenever any style property is changed on the instance, including when a property is set to nil. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.Changed | Fires immediately after a property of the object changes, with some limitations. |