Skip to content

OverlapParams

概览

字段
KindData · 数据 Data
Realmcommon

OverlapParamsPhysicsService 空间查询(GetPartBoundsInBox、GetPartBoundsInRadius、GetPartsInPart)的过滤参数,用于精确控制查询返回的 Unit 集合。它允许按实例白名单或黑名单过滤、按已配置的碰撞组过滤,并限制最大返回数量,从而让空间检测更聚焦于目标对象。

适用场景

常用于需要筛选特定单位进行范围检测的场景,例如只检测指定队伍的单位,或排除某些装饰物,避免查询结果被无关 Unit 干扰。

使用要点

先调用 OverlapParams.New() 创建过滤参数实例,再设置 FilterType 为 Enums.RaycastFilterType.Include 或 Exclude,并将 FilterDescendantsInstances 指定为要包含或排除的 Unit 列表;如需碰撞组过滤,可设置 CollisionGroup 字段。最后将实例作为参数传入 PhysicsService:GetPartBoundsInBox、GetPartBoundsInRadius 或 GetPartsInPart 即可生效。

注意事项

OverlapParamsPhysicsService 空间重叠查询的过滤参数。使用时先用 OverlapParams.New() 构造,再按需设置 FilterType、FilterDescendantsInstances、CollisionGroup、MaxParts;FilterType 使用 Enums.RaycastFilterType.Include/Exclude。CollisionGroup 是用于按已配置碰撞关系过滤的组名,不是只按 WorldUnit.CollisionGroup 字符串同名匹配;最终结果同时受目标 WorldUnit.CollisionGroup、碰撞关系配置和实例过滤影响。不设置(nil,Meta 默认值)表示不启用碰撞组过滤。

代码示例

创建 OverlapParams 并传入空间查询

lua
-- @runtime client
local PhysicsService = game:GetService('PhysicsService')
local World = game:GetService('World')
local targetUnit = World:CreateUnit('WorldUnit', { Position = Vector3.New(0, 0, 0) })
local params = OverlapParams.New()
params.FilterType = Enums.RaycastFilterType.Include
params.FilterDescendantsInstances = { targetUnit }
params.MaxParts = 10
local units = PhysicsService:GetPartBoundsInRadius(Vector3.New(0, 0, 0), 20, params)
print('命中数量:', #units)
targetUnit:Destroy()

属性 (4)

Name类型默认值说明
FilterTypeRaycastFilterTypeEnums.RaycastFilterType.Exclude过滤模式:Exclude 排除列表中的实例,Include 仅检测列表中的实例。
FilterDescendantsInstancesArray<Unit>[]物理查询(如射线、区块、球形、形状检测)中用于过滤的 Unit 实例列表。该属性与 FilterType 配合使用,决定查询结果是仅包含列表中的 Unit,还是排除列表中的 Unit
CollisionGroupString-用于按已配置碰撞关系过滤的碰撞组名称,不是只按 WorldUnit.CollisionGroup 字符串同名匹配;不设置(nil,Meta 默认值)表示不启用碰撞组过滤。
MaxPartsInt0限制区域查询返回的最大实例数量。

函数 (1)

New

签名:New() -> OverlapParams

创建空间重叠查询过滤参数,供 GetPartBoundsInBox、GetPartBoundsInRadius 和 GetPartsInPart 使用;射线与形状投射应使用 RaycastParams

返回值 OverlapParams

示例代码

构造重叠查询过滤参数

lua
-- @runtime client
local params = OverlapParams.New()
params.FilterType = Enums.RaycastFilterType.Exclude
params.FilterDescendantsInstances = {}
params.MaxParts = 10
-- 仅在项目已配置相应碰撞组关系时再设置 CollisionGroup
print("OverlapParams 构造完成,MaxParts =", params.MaxParts)