使用重叠检测实体
信息
本教程适用于 Party Game Kit 用户。
重叠检测可用于判断指定区域内是否存在带碰撞体的实体。球体、盒体、胶囊体或 180° 扇形均可作为检测区域。本教程将演示如何用 GeometrySector180 检测扇形区域内是否存在带碰撞体的实体。
前置条件
需安装并集成 Visual Studio Code 到 Studio。未集成请参考 如何开始编写代码。
扇形检测实体
如需用 180° 扇形检测区域内实体:
-
添加检测目标。
- 确保目标已附加碰撞体。示例添加模型 Transverse_Roadblocks(带网格碰撞体),通过 Asset Box > Models 放入场景。
- 点击 + 功能 并关闭窗口激活模型,自动分配实体 ID。
-
创建空对象 "OverlapSample",在 Explorer 窗口点击 Empty Object,用移动工具调整位置,确保 Z 轴朝向目标。OverlapSample 决定检测起点和方向。

-
给 OverlapSample 添加如下脚本模拟扇形检测。脚本添加方法见 创建或添加脚本。
-- 获取 OverlapSample 的位置和旋转
local cmp = script:GetYaComponent("YaMovableComponent")
local pos = cmp:GetPosition()
local rot = cmp:GetRotationQuaternion()
local queryInstance = YaQueryParameter.Instance()
local queryParam = queryInstance:QueryAllPhysicsLayer()
-- 创建 180° 扇形,半径 2 米,高度 1 米
queryParam = queryParam:GeometrySector180(2, 1)
-- 设置扇形方向为 OverlapSample 的前方
queryParam = queryParam:GeometryDirection(rot * float3.New(0, 0, 1))
local overLapEntities = PhysicsAPI.Overlap(pos, queryParam)
-- 返回所有被扇形击中的实体 ID,无命中则返回 sector overlap nil
if overLapEntities ~= nil then
for k, v in pairs(overLapEntities:ToTable()) do
print(v.EntityId)
end
else
print("sector overlap nil")
end本例中,扇形从 OverlapSample 位置沿前方发射,命中实体则返回实体 ID,无命中则返回 sector overlap nil。
-
保存脚本并在 Play Mode 下测试。点击 控制台(Console) 查看扇形命中结果。
