8 min read

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

NameType / ReturnsDescription
ControllerPartSensor.HitFrameCFrameThe position in world space where the sensor hit the ControllerPartSensor.SensedPart.
ControllerPartSensor.HitNormalVector3The surface normal at the position where the sensor hit the ControllerPartSensor.SensedPart.
ControllerPartSensor.LadderSearchHeightfloatThe upper bound, in studs, of the vertical region the sensor searches for a ladder when ControllerPartSensor.SensorMode is set to a ladder mode.
ControllerPartSensor.LadderSearchOffsetfloatThe 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.SearchDistancefloatThe distance from the sensor's parent BasePart to use when sensing other parts.
ControllerPartSensor.SensedMaterialMaterialThe surface Material of the ControllerPartSensor.SensedPart that the sensor is currently detecting.
ControllerPartSensor.SensedPartBasePartA reference to the BasePart hit by the sensor.
ControllerPartSensor.SensorModeSensorModeDetermines what behavior this SensorBase uses when sensing other parts.

Inherited from SensorBase

NameType / ReturnsDescription
SensorBase.UpdateTypeSensorUpdateTypeDetermines how the sensor will update its output data.

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring

ControllerPartSensor.HitFrame

The position in world space where the sensor hit the ControllerPartSensor.SensedPart.

FieldValue
typeCFrame
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryOutput
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

ControllerPartSensor.HitNormal

The surface normal at the position where the sensor hit the SensedPart.

FieldValue
typeVector3
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryOutput
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

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.

FieldValue
typefloat
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryInput
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

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.

FieldValue
typefloat
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryInput
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

ControllerPartSensor.SearchDistance

The distance from the sensor's parent BasePart to use when sensing other parts.

FieldValue
typefloat
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryInput
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

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.

FieldValue
typeMaterial
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryData
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

ControllerPartSensor.SensedPart

A reference to the BasePart hit by the sensor.

FieldValue
typeBasePart
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryOutput
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

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.

FieldValue
typeSensorMode
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryInput
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]
simulationAccesstrue

Methods

Inherited from SensorBase

NameType / ReturnsDescription
SensorBase:Sense()Recomputes the sensor's output properties immediately.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
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:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns 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:WaitForChildInstanceReturns 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

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

Events

Inherited from SensorBase

NameType / ReturnsDescription
SensorBase.OnSensorOutputChangedFires when one of the sensor's output properties changes value.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.