学习
引擎类
WorldRoot
无法创建

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处


概要
方法
ArePartsTouchingOthers(partList: Instances,overlapIgnored: number):boolean
Blockcast(cframe: CFrame,size: Vector3,direction: Vector3,params: RaycastParams):RaycastResult?
BulkMoveTo(partList: Instances,cframeList: {any},eventMode: Enum.BulkMoveMode):()
FindPartOnRay(ray: Ray,ignoreDescendantsInstance: Instance,terrainCellsAreCubes: boolean,ignoreWater: boolean):Tuple
已弃用
findPartOnRay(ray: Ray,ignoreDescendantsInstance: Instance,terrainCellsAreCubes: boolean,ignoreWater: boolean):Tuple
已弃用
FindPartOnRayWithIgnoreList(ray: Ray,ignoreDescendantsTable: Instances,terrainCellsAreCubes: boolean,ignoreWater: boolean):Tuple
已弃用
FindPartOnRayWithWhitelist(ray: Ray,whitelistDescendantsTable: Instances,ignoreWater: boolean):Tuple
已弃用
FindPartsInRegion3(region: Region3,ignoreDescendantsInstance: Instance,maxParts: number):{BasePart}
已弃用
findPartsInRegion3(region: Region3,ignoreDescendantsInstance: Instance,maxParts: number):{BasePart}
已弃用
FindPartsInRegion3WithIgnoreList(region: Region3,ignoreDescendantsTable: Instances,maxParts: number):{BasePart}
已弃用
FindPartsInRegion3WithWhiteList(region: Region3,whitelistDescendantsTable: Instances,maxParts: number):{BasePart}
已弃用
GetPartBoundsInBox(cframe: CFrame,size: Vector3,overlapParams: OverlapParams):{BasePart}
GetPartBoundsInRadius(position: Vector3,radius: number,overlapParams: OverlapParams):{BasePart}
IKMoveTo(part: BasePart,target: CFrame,translateStiffness: number,rotateStiffness: number,collisionsMode: Enum.IKCollisionsMode):()
IsRegion3Empty(region: Region3,ignoreDescendentsInstance: Instance):boolean
已弃用
IsRegion3EmptyWithIgnoreList(region: Region3,ignoreDescendentsTable: Instances):boolean
已弃用
Raycast(origin: Vector3,direction: Vector3,raycastParams: RaycastParams):RaycastResult?
Spherecast(position: Vector3,radius: number,direction: Vector3,params: RaycastParams):RaycastResult?
StepPhysics(dt: number,parts: Instances):()
继承成员

API 参考
方法
ArePartsTouchingOthers
模拟访问权限
WorldRoot:ArePartsTouchingOthers(
partList:Instances, overlapIgnored:number
参数
partList:Instances
overlapIgnored:number
默认值:0.000199999995
返回
代码示例
检查接触部件
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- 真
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- 真
print(workspace:ArePartsTouchingOthers(partList, 1)) -- 假

Blockcast
写入并联
模拟访问权限
WorldRoot:Blockcast(
cframe:CFrame, size:Vector3, direction:Vector3, params:RaycastParams
参数
cframe:CFrame
size:Vector3
direction:Vector3
默认值:"RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"
代码示例
封块
local Workspace = game:GetService("Workspace")
local function castBlock()
-- 封块形状的初始位置和旋转
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- 封块形状的大小
local size = Vector3.new(6, 3, 9)
-- 封送块的方向
local direction = -Vector3.yAxis
-- 封送的最大距离
local distance = 50
-- 封送块并创建其可视化
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- 如果 RaycastResult 存在,打印其所有属性
print(`块与的交点: {raycastResult.Instance:GetFullName()}`)
print(`交点位置: {raycastResult.Position}`)
print(`块的初始位置和结果之间的距离: {raycastResult.Distance}`)
print(`交点面的法向量: {raycastResult.Normal}`)
print(`击中的材质: {raycastResult.Material.Name}`)
else
print("未击中任何东西")
end
end
-- 每 2 秒不断封送一个块
while true do
castBlock()
task.wait(2)
end

BulkMoveTo
模拟访问权限
WorldRoot:BulkMoveTo(
partList:Instances, cframeList:{any}, eventMode:Enum.BulkMoveMode
):()
参数
partList:Instances
cframeList:{any}
默认值:"FireAllEvents"
返回
()

FindPartOnRay
已弃用

findPartOnRay
已弃用

FindPartOnRayWithIgnoreList
已弃用

FindPartOnRayWithWhitelist
已弃用

FindPartsInRegion3
已弃用

findPartsInRegion3
已弃用

FindPartsInRegion3WithIgnoreList
已弃用

FindPartsInRegion3WithWhiteList
已弃用

GetPartBoundsInBox
写入并联
模拟访问权限
WorldRoot:GetPartBoundsInBox(
cframe:CFrame, size:Vector3, overlapParams:OverlapParams
参数
cframe:CFrame
size:Vector3
overlapParams:OverlapParams
默认值:"OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"
返回

GetPartBoundsInRadius
写入并联
模拟访问权限
WorldRoot:GetPartBoundsInRadius(
position:Vector3, radius:number, overlapParams:OverlapParams
参数
position:Vector3
radius:number
overlapParams:OverlapParams
默认值:"OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"
返回

GetPartsInPart
写入并联
模拟访问权限
WorldRoot:GetPartsInPart(
part:BasePart, overlapParams:OverlapParams
参数
overlapParams:OverlapParams
默认值:"OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"
返回

IKMoveTo
插件安全性
模拟访问权限
WorldRoot:IKMoveTo(
part:BasePart, target:CFrame, translateStiffness:number, rotateStiffness:number, collisionsMode:Enum.IKCollisionsMode
):()
参数
target:CFrame
translateStiffness:number
默认值:0.5
rotateStiffness:number
默认值:0.5
collisionsMode:Enum.IKCollisionsMode
默认值:"OtherMechanismsAnchored"
返回
()

IsRegion3Empty
已弃用

IsRegion3EmptyWithIgnoreList
已弃用

Raycast
写入并联
模拟访问权限
WorldRoot:Raycast(
origin:Vector3, direction:Vector3, raycastParams:RaycastParams
参数
origin:Vector3
direction:Vector3
raycastParams:RaycastParams
默认值:"RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"
代码示例
射线检测
local Workspace = game:GetService("Workspace")
local function castRay()
-- 射线的起点
local originPosition = Vector3.new(0, 50, 0)
-- 射线发射的方向
local direction = -Vector3.yAxis
-- 射线的最大距离
local distance = 50
-- 发射射线并创建一个可视化效果
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- 如果存在,打印 RaycastResult 的所有属性
print(`射线与: {raycastResult.Instance:GetFullName()} 相交`)
print(`交点位置: {raycastResult.Position}`)
print(`射线起点与结果之间的距离: {raycastResult.Distance}`)
print(`相交面的法向量: {raycastResult.Normal}`)
print(`击中的材质: {raycastResult.Material.Name}`)
else
print("没有任何东西被击中")
end
end
-- 每 2 秒不断发射一条射线
while true do
castRay()
task.wait(2)
end

Shapecast
模拟访问权限
WorldRoot:Shapecast(
part:BasePart, direction:Vector3, params:RaycastParams
参数
direction:Vector3
默认值:"RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

Spherecast
写入并联
模拟访问权限
WorldRoot:Spherecast(
position:Vector3, radius:number, direction:Vector3, params:RaycastParams
参数
position:Vector3
radius:number
direction:Vector3
默认值:"RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"
代码示例
球形投射
local Workspace = game:GetService("Workspace")
local function castSphere()
-- 投射球形的初始位置
local originPosition = Vector3.new(0, 50, 0)
-- 投射球形的半径,单位为studs
local radius = 10
-- 球体投射的方向
local direction = -Vector3.yAxis
-- 投射的最大距离
local distance = 50
-- 投射球体并创建其可视化
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- 如果存在,打印 RaycastResult 的所有属性
print(`球体与: {raycastResult.Instance:GetFullName()} 相交`)
print(`交点位置: {raycastResult.Position}`)
print(`球体初始位置与结果之间的距离: {raycastResult.Distance}`)
print(`相交面的法向量: {raycastResult.Normal}`)
print(`击中材料: {raycastResult.Material.Name}`)
else
print("没有击中任何东西")
end
end
-- 每2秒持续投射一个球
while true do
castSphere()
task.wait(2)
end

StepPhysics
插件安全性
WorldRoot:StepPhysics(
dt:number, parts:Instances
):()
参数
parts:Instances
默认值:"{}"
返回
()
代码示例
步进物理
local RunService = game:GetService("RunService")
-- 可选的部件数组进行模拟;否则将模拟所有部件
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- 在 5 秒内模拟工作区部件,每帧步进一次
simulateParts(5.0)

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。