Aprender
Clase de motor
BasePart
No creable
No explorable

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.


Resumen
Propiedades
Friction:number
Obsoleto
TopParamA:number
Obsoleto
TopParamB:number
Obsoleto
Velocity:Vector3
Obsoleto
Miembros heredados
Muestras de código
Suavizado del CFrame de una Parte
local TweenService = game:GetService("TweenService")
-- crear una parte y un objetivo
local part = Instance.new("Part", workspace)
part.Size = Vector3.one
part.Anchored = true
part.BrickColor = BrickColor.new("Azul eléctrico")
part.CFrame = CFrame.new(0, 4, 0)
local target = Instance.new("Part", workspace)
target.Name = "Objetivo"
target.Size = Vector3.one * 0.5
target.Anchored = true
target.BrickColor = BrickColor.new("Rojo intenso")
target.CFrame = CFrame.new(0, 8, 0)
-- configurar una variable para almacenar la velocidad
local velocity = CFrame.new()
-- ajustar la velocidad de suavizado
local smoothTime = 0.5
game:GetService("RunService").Stepped:Connect(function(t, dt)
part.CFrame, velocity = TweenService:SmoothDamp(part.CFrame, target.CFrame, velocity, smoothTime, math.huge, dt)
end)

Referencia API
Propiedades
Anchored
Leer paralelo
Acceso a la simulación
BasePart.Anchored:boolean
Muestras de código
Alternar Anclado de Parte
local part = script.Parent
-- Crear un ClickDetector para que podamos saber cuándo se hace clic en la parte
local cd = Instance.new("ClickDetector", part)
-- Esta función actualiza cómo se ve la parte en función de su estado Anclado
local function updateVisuals()
if part.Anchored then
-- Cuando la parte está anclada...
part.BrickColor = BrickColor.new("Rojo Brillante")
part.Material = Enum.Material.DiamondPlate
else
-- Cuando la parte no está anclada...
part.BrickColor = BrickColor.new("Amarillo Brillante")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Alternar la propiedad anclada
part.Anchored = not part.Anchored
-- Actualizar el estado visual del ladrillo
updateVisuals()
end
-- Actualizar, luego comenzar a escuchar clics
updateVisuals()
cd.MouseClick:Connect(onToggle)

AssemblyAngularVelocity
No replicado
Leer paralelo
Acceso a la simulación
BasePart.AssemblyAngularVelocity:Vector3

AssemblyCenterOfMass
Solo lectura
No replicado
Leer paralelo
Acceso a la simulación
BasePart.AssemblyCenterOfMass:Vector3

AssemblyLinearVelocity
No replicado
Leer paralelo
Acceso a la simulación
BasePart.AssemblyLinearVelocity:Vector3

AssemblyMass
Solo lectura
No replicado
Leer paralelo
Acceso a la simulación
BasePart.AssemblyMass:number

AssemblyRootPart
Solo lectura
No replicado
Leer paralelo
Acceso a la simulación
BasePart.AssemblyRootPart:BasePart

AudioCanCollide
Leer paralelo
Acceso a la simulación
BasePart.AudioCanCollide:boolean

BackParamA
Obsoleto

BackParamB
Obsoleto

BackSurface
Leer paralelo
BasePart.BackSurface:Enum.SurfaceType

BackSurfaceInput
Obsoleto

BottomParamA
Obsoleto

BottomParamB
Obsoleto

BottomSurface
Leer paralelo
BasePart.BottomSurface:Enum.SurfaceType

BottomSurfaceInput
Obsoleto

BrickColor
No replicado
Leer paralelo
BasePart.BrickColor:BrickColor

brickColor
Obsoleto

CanCollide
Leer paralelo
Acceso a la simulación
BasePart.CanCollide:boolean
Muestras de código
Puerta Desaparecedora
-- Pega esto en un Script dentro de una parte alta
local part = script.Parent
local OPEN_TIME = 1
-- ¿Se puede abrir la puerta en este momento?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Negro")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Azul brillante")
end
local function onTouch(otherPart)
-- Si la puerta ya estaba abierta, no hacer nada
if debounce then
print("D")
return
end
-- Verificar si fue tocada por un Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("no humano")
return
end
-- Realizar la secuencia de apertura de la puerta
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()

CanQuery
Leer paralelo
Acceso a la simulación
BasePart.CanQuery:boolean

CanTouch
Leer paralelo
Acceso a la simulación
BasePart.CanTouch:boolean

CastShadow
Leer paralelo
BasePart.CastShadow:boolean

CenterOfMass
Solo lectura
No replicado
Leer paralelo
Acceso a la simulación
BasePart.CenterOfMass:Vector3

CFrame
Leer paralelo
Acceso a la simulación
BasePart.CFrame:CFrame
Muestras de código
Configuración del CFrame de una parte
local part = script.Parent:WaitForChild("Part")
local otherPart = script.Parent:WaitForChild("OtherPart")
-- Restablecer el CFrame de la parte a (0, 0, 0) sin rotación.
-- Esto a veces se llama el CFrame "identidad"
part.CFrame = CFrame.new()
-- Establecer en una posición específica (X, Y, Z)
part.CFrame = CFrame.new(0, 25, 10)
-- Igual que arriba, pero usar un Vector3 en su lugar
local point = Vector3.new(0, 25, 10)
part.CFrame = CFrame.new(point)
-- Establecer el CFrame de la parte para estar en un punto, mirando a otro
local lookAtPoint = Vector3.new(0, 20, 15)
part.CFrame = CFrame.lookAt(point, lookAtPoint)
-- Rotar el CFrame de la parte por pi/2 radianes en el eje X local
part.CFrame = part.CFrame * CFrame.Angles(math.pi / 2, 0, 0)
-- Rotar el CFrame de la parte por 45 grados en el eje Y local
part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(45), 0)
-- Rotar el CFrame de la parte por 180 grados en el eje Z global (¡nota el orden!)
part.CFrame = CFrame.Angles(0, 0, math.pi) * part.CFrame -- Los radianes de Pi son equivalentes a 180 grados
-- Componer dos CFrames se hace usando * (el operador de multiplicación)
part.CFrame = CFrame.new(2, 3, 4) * CFrame.new(4, 5, 6) --> igual a CFrame.new(6, 8, 10)
-- A diferencia de la multiplicación algebraica, la composición de CFrame NO es conmutativa: a * b no es necesariamente b * a!
-- Imagina * como una serie de acciones ORDENADAS. Por ejemplo, las siguientes líneas producen diferentes CFrames:
-- 1) Deslizar la parte 5 unidades en X.
-- 2) Rotar la parte 45 grados alrededor de su eje Y.
part.CFrame = CFrame.new(5, 0, 0) * CFrame.Angles(0, math.rad(45), 0)
-- 1) Rotar la parte 45 grados alrededor de su eje Y.
-- 2) Deslizar la parte 5 unidades en X.
part.CFrame = CFrame.Angles(0, math.rad(45), 0) * CFrame.new(5, 0, 0)
-- No hay "división de CFrame", sino simplemente "hacer la operación inversa".
part.CFrame = CFrame.new(4, 5, 6) * CFrame.new(4, 5, 6):Inverse() --> es igual a CFrame.new(0, 0, 0)
part.CFrame = CFrame.Angles(0, 0, math.pi) * CFrame.Angles(0, 0, math.pi):Inverse() --> igual a CFrame.Angles(0, 0, 0)
-- Posicionar una parte en relación a otra (en este caso, colocar nuestra parte encima de otherPart)
part.CFrame = otherPart.CFrame * CFrame.new(0, part.Size.Y / 2 + otherPart.Size.Y / 2, 0)

CollisionGroup
No replicado
Leer paralelo
Acceso a la simulación
BasePart.CollisionGroup:string
Muestras de código
PhysicsService:RegisterCollisionGroup
local PhysicsService = game:GetService("PhysicsService")
local collisionGroupBall = "CollisionGroupBall"
local collisionGroupDoor = "CollisionGroupDoor"
-- Registrar grupos de colisión
PhysicsService:RegisterCollisionGroup(collisionGroupBall)
PhysicsService:RegisterCollisionGroup(collisionGroupDoor)
-- Asignar partes a grupos de colisión
script.Parent.BallPart.CollisionGroup = collisionGroupBall
script.Parent.DoorPart.CollisionGroup = collisionGroupDoor
-- Establecer grupos como no colisionables entre sí y comprobar el resultado
PhysicsService:CollisionGroupSetCollidable(collisionGroupBall, collisionGroupDoor, false)
print(PhysicsService:CollisionGroupsAreCollidable(collisionGroupBall, collisionGroupDoor)) --> false

CollisionGroupId
Obsoleto

Color
No replicado
Leer paralelo
BasePart.Color:Color3
Muestras de código
Color de Cuerpo de Salud del Personaje
-- Pega esto en un Script dentro de StarterCharacterScripts
-- Luego juega el juego y ajusta la salud de tu personaje
local char = script.Parent
local human = char.Humanoid
local colorHealthy = Color3.new(0.4, 1, 0.2)
local colorUnhealthy = Color3.new(1, 0.4, 0.2)
local function setColor(color)
for _, child in pairs(char:GetChildren()) do
if child:IsA("BasePart") then
child.Color = color
while child:FindFirstChildOfClass("Decal") do
child:FindFirstChildOfClass("Decal"):Destroy()
end
elseif child:IsA("Accessory") then
child.Handle.Color = color
local mesh = child.Handle:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh.TextureId = ""
end
elseif child:IsA("Shirt") or child:IsA("Pants") then
child:Destroy()
end
end
end
local function update()
local percentage = human.Health / human.MaxHealth
-- Crea un color interpolando basado en el porcentaje de tu salud
-- El color va de colorHealthy (100%) ----- > colorUnhealthy (0%)
local color = Color3.new(
colorHealthy.R * percentage + colorUnhealthy.r * (1 - percentage),
colorHealthy.G * percentage + colorUnhealthy.g * (1 - percentage),
colorHealthy.B * percentage + colorUnhealthy.b * (1 - percentage)
)
setColor(color)
end
update()
human.HealthChanged:Connect(update)

CurrentPhysicalProperties
Solo lectura
No replicado
Leer paralelo
BasePart.CurrentPhysicalProperties:PhysicalProperties

CustomPhysicalProperties
Leer paralelo
Acceso a la simulación
BasePart.CustomPhysicalProperties:PhysicalProperties
Muestras de código
Establecer propiedades físicas personalizadas
local part = script.Parent
-- ¡Esto hará que la parte sea ligera y rebotadora!
local DENSITY = 0.3
local FRICTION = 0.1
local ELASTICITY = 1
local FRICTION_WEIGHT = 1
local ELASTICITY_WEIGHT = 1
local physProperties = PhysicalProperties.new(DENSITY, FRICTION, ELASTICITY, FRICTION_WEIGHT, ELASTICITY_WEIGHT)
part.CustomPhysicalProperties = physProperties

Elasticity
Obsoleto

EnableFluidForces
Leer paralelo
Acceso a la simulación
BasePart.EnableFluidForces:boolean

ExtentsCFrame
Solo lectura
No replicado
Leer paralelo
Acceso a la simulación
BasePart.ExtentsCFrame:CFrame

ExtentsSize
Solo lectura
No replicado
Leer paralelo
Acceso a la simulación
BasePart.ExtentsSize:Vector3

Friction
Obsoleto

FrontParamA
Obsoleto

FrontParamB
Obsoleto

FrontSurface
Leer paralelo
BasePart.FrontSurface:Enum.SurfaceType

FrontSurfaceInput
Obsoleto

LeftParamA
Obsoleto

LeftParamB
Obsoleto

LeftSurface
Leer paralelo
BasePart.LeftSurface:Enum.SurfaceType

LeftSurfaceInput
Obsoleto

LocalTransparencyModifier
Oculto
No replicado
Leer paralelo
BasePart.LocalTransparencyModifier:number

Locked
Leer paralelo
Acceso a la simulación
BasePart.Locked:boolean
Muestras de código
Desbloqueo Recursivo
-- Pega en un Script dentro de un Modelo que quieras desbloquear
local model = script.Parent
-- Esta función recorre la jerarquía de un modelo y desbloquea
-- cada parte que encuentra.
local function recursiveUnlock(object)
if object:IsA("BasePart") then
object.Locked = false
end
-- Llama a la misma función en los hijos del objeto
-- El proceso recursivo se detiene si un objeto no tiene hijos
for _, child in pairs(object:GetChildren()) do
recursiveUnlock(child)
end
end
recursiveUnlock(model)

Mass
Solo lectura
No replicado
Leer paralelo
Acceso a la simulación
BasePart.Mass:number

Massless
Leer paralelo
Acceso a la simulación
BasePart.Massless:boolean

Material
Leer paralelo
Acceso a la simulación
BasePart.Material:Enum.Material

MaterialVariant
No replicado
Leer paralelo
Acceso a la simulación
BasePart.MaterialVariant:string

Orientation
Oculto
No replicado
Leer paralelo
Acceso a la simulación
BasePart.Orientation:Vector3
Muestras de código
Girador de Parte
local part = script.Parent
local INCREMENT = 360 / 20
-- Rote la parte continuamente
while true do
for degrees = 0, 360, INCREMENT do
-- Establecer solo la rotación del eje Y
part.Rotation = Vector3.new(0, degrees, 0)
-- Una mejor manera de hacer esto sería configurando CFrame
--part.CFrame = CFrame.new(part.Position) * CFrame.Angles(0, math.rad(degrees), 0)
task.wait()
end
end

PivotOffset
Leer paralelo
Acceso a la simulación
BasePart.PivotOffset:CFrame
Muestras de código
Restablecer Pivot
local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)
Manecillas del Reloj
local function createHand(length, width, yOffset)
local part = Instance.new("Part")
part.Size = Vector3.new(width, 0.1, length)
part.Material = Enum.Material.Neon
part.PivotOffset = CFrame.new(0, -(yOffset + 0.1), length / 2)
part.Anchored = true
part.Parent = workspace
return part
end
local function positionHand(hand, fraction)
hand:PivotTo(CFrame.fromEulerAnglesXYZ(0, -fraction * 2 * math.pi, 0))
end
-- Crear el dial
for i = 0, 11 do
local dialPart = Instance.new("Part")
dialPart.Size = Vector3.new(0.2, 0.2, 1)
dialPart.TopSurface = Enum.SurfaceType.Smooth
if i == 0 then
dialPart.Size = Vector3.new(0.2, 0.2, 2)
dialPart.Color = Color3.new(1, 0, 0)
end
dialPart.PivotOffset = CFrame.new(0, -0.1, 10.5)
dialPart.Anchored = true
dialPart:PivotTo(CFrame.fromEulerAnglesXYZ(0, (i / 12) * 2 * math.pi, 0))
dialPart.Parent = workspace
end
-- Crear manecillas
local hourHand = createHand(7, 1, 0)
local minuteHand = createHand(10, 0.6, 0.1)
local secondHand = createHand(11, 0.2, 0.2)
-- Ejecutar reloj
while true do
local components = os.date("*t")
positionHand(hourHand, (components.hour + components.min / 60) / 12)
positionHand(minuteHand, (components.min + components.sec / 60) / 60)
positionHand(secondHand, components.sec / 60)
task.wait()
end

Position
Oculto
No replicado
Leer paralelo
Acceso a la simulación
BasePart.Position:Vector3

ReceiveAge
Oculto
Solo lectura
No replicado
Leer paralelo
BasePart.ReceiveAge:number

Reflectance
Leer paralelo
BasePart.Reflectance:number

ResizeableFaces
Solo lectura
No replicado
Leer paralelo
BasePart.ResizeableFaces:Faces
Muestras de código
Controladores de Redimensionamiento
-- Coloca este Script en varios tipos de BasePart, como
-- Parte, TrussPart, WedgePart, CornerWedgePart, etc.
local part = script.Parent
-- Crea un objeto handles para esta parte
local handles = Instance.new("Handles")
handles.Adornee = part
handles.Parent = part
-- Especifica manualmente las caras aplicables para este control
handles.Faces = Faces.new(Enum.NormalId.Top, Enum.NormalId.Front, Enum.NormalId.Left)
-- Alternativamente, usa las caras en las que la parte puede ser redimensionada.
-- Si la parte es un TrussPart con solo dos dimensiones de tamaño
-- de longitud 2, entonces ResizeableFaces solo tendrá dos
-- caras habilitadas. Para otras partes, todas las caras estarán habilitadas.
handles.Faces = part.ResizeableFaces

ResizeIncrement
Solo lectura
No replicado
Leer paralelo
BasePart.ResizeIncrement:number

RightParamA
Obsoleto

RightParamB
Obsoleto

RightSurface
Leer paralelo
BasePart.RightSurface:Enum.SurfaceType

RightSurfaceInput
Obsoleto

RootPriority
Leer paralelo
BasePart.RootPriority:number

Rotation
No replicado
Leer paralelo
Acceso a la simulación
BasePart.Rotation:Vector3

RotVelocity
Obsoleto

Size
No replicado
Leer paralelo
Acceso a la simulación
BasePart.Size:Vector3
Muestras de código
Constructor de Pirámides
local TOWER_BASE_SIZE = 30
local position = Vector3.new(50, 50, 50)
local hue = math.random()
local color0 = Color3.fromHSV(hue, 1, 1)
local color1 = Color3.fromHSV((hue + 0.35) % 1, 1, 1)
local model = Instance.new("Model")
model.Name = "Tower"
for i = TOWER_BASE_SIZE, 1, -2 do
local part = Instance.new("Part")
part.Size = Vector3.new(i, 2, i)
part.Position = position
part.Anchored = true
part.Parent = model
-- Tween desde color0 y color1
local perc = i / TOWER_BASE_SIZE
part.Color = Color3.new(
color0.R * perc + color1.R * (1 - perc),
color0.G * perc + color1.G * (1 - perc),
color0.B * perc + color1.B * (1 - perc)
)
position = position + Vector3.new(0, part.Size.Y, 0)
end
model.Parent = workspace

SpecificGravity
Obsoleto

TopParamA
Obsoleto

TopParamB
Obsoleto

TopSurface
Leer paralelo
BasePart.TopSurface:Enum.SurfaceType

TopSurfaceInput
Obsoleto

Transparency
Leer paralelo
BasePart.Transparency:number
Muestras de código
Puerta Desaparecedora
-- Pega esto en un Script dentro de una parte alta
local part = script.Parent
local OPEN_TIME = 1
-- ¿Se puede abrir la puerta en este momento?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Negro")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Azul brillante")
end
local function onTouch(otherPart)
-- Si la puerta ya estaba abierta, no hacer nada
if debounce then
print("D")
return
end
-- Verificar si fue tocada por un Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("no humano")
return
end
-- Realizar la secuencia de apertura de la puerta
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()

Velocity
Obsoleto

Métodos
AngularAccelerationToTorque
Acceso a la simulación
BasePart:AngularAccelerationToTorque(
angAcceleration:Vector3, angVelocity:Vector3
Parámetros
angAcceleration:Vector3
angVelocity:Vector3
Valor predeterminado: "0, 0, 0"
Devuelve

ApplyAngularImpulse
Acceso a la simulación
BasePart:ApplyAngularImpulse(impulse:Vector3):()
Parámetros
impulse:Vector3
Devuelve
()

ApplyImpulse
Acceso a la simulación
BasePart:ApplyImpulse(impulse:Vector3):()
Parámetros
impulse:Vector3
Devuelve
()

ApplyImpulseAtPosition
Acceso a la simulación
BasePart:ApplyImpulseAtPosition(
impulse:Vector3, position:Vector3
):()
Parámetros
impulse:Vector3
position:Vector3
Devuelve
()

BreakJoints
Obsoleto

breakJoints
Obsoleto

CanCollideWith
Escribir paralelo
Acceso a la simulación
BasePart:CanCollideWith(part:BasePart):boolean
Parámetros
Devuelve

CanSetNetworkOwnership
Acceso a la simulación
BasePart:CanSetNetworkOwnership():Tuple
Devuelve
Muestras de código
Comprobar si se puede establecer la propiedad de red de una parte
local part = workspace:FindFirstChild("Part")
if part and part:IsA("BasePart") then
local canSet, errorReason = part:CanSetNetworkOwnership()
if canSet then
print(part:GetFullName() .. "¡La propiedad de red de " .. part:GetFullName() .. " se puede cambiar!")
else
warn("No se puede cambiar la propiedad de red de " .. part:GetFullName() .. " porque: " .. errorReason)
end
end

GetClosestPointOnSurface
Acceso a la simulación
BasePart:GetClosestPointOnSurface(position:Vector3):Vector3
Parámetros
position:Vector3
Devuelve

GetConnectedParts
Escribir paralelo
BasePart:GetConnectedParts(recursive:boolean):{BasePart}
Parámetros
recursive:boolean
Valor predeterminado: false
Devuelve

GetJoints
Escribir paralelo
Acceso a la simulación
BasePart:GetJoints():Instances
Devuelve
Instances

GetMass
Escribir paralelo
Acceso a la simulación
BasePart:GetMass():number
Devuelve
Muestras de código
Encontrar la masa de una pieza
local myPart = Instance.new("Part")
myPart.Size = Vector3.new(4, 6, 4)
myPart.Anchored = true
myPart.Parent = workspace
local myMass = myPart:GetMass()
print("La masa de mi pieza es " .. myMass)

getMass
Obsoleto

GetNetworkOwner
Escribir paralelo
Acceso a la simulación
BasePart:GetNetworkOwner():Instance
Devuelve

GetNetworkOwnershipAuto
Escribir paralelo
Acceso a la simulación
BasePart:GetNetworkOwnershipAuto():boolean
Devuelve

GetNoCollisionConstraints
Acceso a la simulación
BasePart:GetNoCollisionConstraints():Instances
Devuelve
Instances

GetRenderCFrame
Obsoleto

GetRootPart
Obsoleto

GetTouchingParts
Acceso a la simulación
BasePart:GetTouchingParts():Instances
Devuelve
Instances

GetVelocityAtPosition
Escribir paralelo
Acceso a la simulación
BasePart:GetVelocityAtPosition(position:Vector3):Vector3
Parámetros
position:Vector3
Devuelve

IntersectAsync
Proporciona
Capacidades: CSG
BasePart:IntersectAsync(
parts:Instances, collisionfidelity:Enum.CollisionFidelity, renderFidelity:Enum.RenderFidelity
Parámetros
parts:Instances
collisionfidelity:Enum.CollisionFidelity
Valor predeterminado: "Default"
renderFidelity:Enum.RenderFidelity
Valor predeterminado: "Automatic"
Devuelve

IsGrounded
Escribir paralelo
Acceso a la simulación
BasePart:IsGrounded():boolean
Devuelve

MakeJoints
Obsoleto

makeJoints
Obsoleto

Resize
Acceso a la simulación
BasePart:Resize(
normalId:Enum.NormalId, deltaAmount:number
Parámetros
normalId:Enum.NormalId
deltaAmount:number
Devuelve

resize
Obsoleto

SetNetworkOwner
Acceso a la simulación
BasePart:SetNetworkOwner(playerInstance:Player):()
Parámetros
playerInstance:Player
Valor predeterminado: "nil"
Devuelve
()

SetNetworkOwnershipAuto
Acceso a la simulación
BasePart:SetNetworkOwnershipAuto():()
Devuelve
()

SubtractAsync
Proporciona
Capacidades: CSG
BasePart:SubtractAsync(
parts:Instances, collisionfidelity:Enum.CollisionFidelity, renderFidelity:Enum.RenderFidelity
Parámetros
parts:Instances
collisionfidelity:Enum.CollisionFidelity
Valor predeterminado: "Default"
renderFidelity:Enum.RenderFidelity
Valor predeterminado: "Automatic"
Devuelve
Muestras de código
BasePart:SubtractAsync()
local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Realizar operación de resta
local success, newSubtract = pcall(function()
return mainPart:SubtractAsync(otherParts)
end)
-- Si la operación tiene éxito, colócalo en la misma ubicación y agrégalo al espacio de trabajo
if success and newSubtract then
newSubtract.Position = mainPart.Position
newSubtract.Parent = Workspace
end
-- Destruir las partes originales que permanecen intactas después de la operación
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

TorqueToAngularAcceleration
Acceso a la simulación
BasePart:TorqueToAngularAcceleration(
torque:Vector3, angVelocity:Vector3
Parámetros
torque:Vector3
angVelocity:Vector3
Valor predeterminado: "0, 0, 0"
Devuelve

UnionAsync
Proporciona
Capacidades: CSG
BasePart:UnionAsync(
parts:Instances, collisionfidelity:Enum.CollisionFidelity, renderFidelity:Enum.RenderFidelity
Parámetros
parts:Instances
collisionfidelity:Enum.CollisionFidelity
Valor predeterminado: "Default"
renderFidelity:Enum.RenderFidelity
Valor predeterminado: "Automatic"
Devuelve
Muestras de código
BasePart:UnionAsync()
local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Realizar la operación de unión
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- Si la operación tiene éxito, colócalo en la misma ubicación y parentéalo al workspace
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- Destruir las partes originales que permanecen intactas después de la operación
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

Eventos
LocalSimulationTouched
Obsoleto

OutfitChanged
Obsoleto

StoppedTouching
Obsoleto

Touched
BasePart.Touched(otherPart:BasePart):RBXScriptSignal
Parámetros
otherPart:BasePart
Muestras de código
Contador de Partes Tocadas
local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("El toque ha comenzado: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("El toque ha terminado: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
Modelo Tocado
local model = script.Parent
local function onTouched(otherPart)
-- Ignorar instancias del modelo que entran en contacto consigo mismas
if otherPart:IsDescendantOf(model) then
return
end
print(model.Name .. " colisionó con " .. otherPart.Name)
end
for _, child in pairs(model:GetChildren()) do
if child:IsA("BasePart") then
child.Touched:Connect(onTouched)
end
end

TouchEnded
BasePart.TouchEnded(otherPart:BasePart):RBXScriptSignal
Parámetros
otherPart:BasePart
Muestras de código
Contador de Partes Tocadas
local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("El toque ha comenzado: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("El toque ha terminado: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.