概要
方法
ArePartsTouchingOthers(partList: Instances,overlapIgnored: number):boolean |
Blockcast(cframe: CFrame,size: Vector3,direction: Vector3,params: RaycastParams):RaycastResult? |
BulkMoveTo(partList: Instances,cframeList: {any},eventMode: Enum.BulkMoveMode):() |
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} |
GetPartsInPart(part: BasePart,overlapParams: OverlapParams):{BasePart} |
IsRegion3Empty(region: Region3,ignoreDescendentsInstance: Instance):boolean |
IsRegion3EmptyWithIgnoreList(region: Region3,ignoreDescendentsTable: Instances):boolean |
Raycast(origin: Vector3,direction: Vector3,raycastParams: RaycastParams):RaycastResult? |
Shapecast(part: BasePart,direction: Vector3,params: RaycastParams):RaycastResult? |
Spherecast(position: Vector3,radius: number,direction: Vector3,params: RaycastParams):RaycastResult? |
StepPhysics(dt: number,parts: Instances):() |
子類別
API 參考
方法
ArePartsTouchingOthers
參數
partList:Instances |
| 預設值: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(
參數
| 預設值:"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)
endBulkMoveTo
參數
partList:Instances |
| 預設值:"FireAllEvents" |
返回
()
FindPartOnRay
findPartOnRay
FindPartOnRayWithIgnoreList
FindPartOnRayWithWhitelist
FindPartsInRegion3
findPartsInRegion3
FindPartsInRegion3WithIgnoreList
FindPartsInRegion3WithWhiteList
GetPartBoundsInBox
參數
| 預設值:"OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}" |
返回
{BasePart}
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius(
參數
| 預設值:"OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}" |
返回
{BasePart}
GetPartsInPart
參數
| 預設值:"OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}" |
返回
{BasePart}
IKMoveTo
WorldRoot:IKMoveTo(
part:BasePart, target:CFrame, translateStiffness:number, rotateStiffness:number, collisionsMode:Enum.IKCollisionsMode
):()
參數
| 預設值:0.5 |
| 預設值:0.5 |
| 預設值:"OtherMechanismsAnchored" |
返回
()
IsRegion3Empty
IsRegion3EmptyWithIgnoreList
Raycast
參數
| 預設值:"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)
endShapecast
參數
| 預設值:"RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}" |
Spherecast
WorldRoot:Spherecast(
參數
| 預設值:"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)
endStepPhysics
參數
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)