使用射线检测实体
信息
本教程适用于 Party Game Kit 用户。
射线检测通过从指定位置和方向发射不可见射线来检测实体。本教程演示如何用 RaycastSingle 检测实体并返回第一个被射线命中的实体。
前置条件
需安装并集成 Visual Studio Code 到 Studio。未集成 请参考 如何开始编写代码。
射线检测实体
可通过射线和 RaycastSingle 检测实体并返回第一个命中的实体。方法如下:
-
添加检测目标。
- 确保目标已附加碰撞体。示例添加模型 Transverse_Roadblocks(带网格碰撞体),通过 Asset Box > Models 放入场景。
- 点击 + 功能 并关闭窗口激活模型,自动分配实体 ID。
-
创建空对象 "RaycastSample",在 Explorer 窗口点击 Empty Object,用移动工具调整位置,确保 Z 轴朝向目标。RaycastSample 决定射线起点和方向。

-
给 RaycastSample 添加如下脚本模拟射线检测。脚本添加方法见 创建或添加脚本。
local queryInstance = YaQueryParameter.Instance()
local queryParam = queryInstance:QueryAllPhysicsLayer()
-- 获取 RaycastSample 的起点和方向
local cmp = script:GetYaComponent("YaMovableComponent")
local pos = cmp:GetPosition()
local rot = cmp:GetRotationQuaternion()
-- 设置射线方向
local entityForward = rot * float3.New(0, 0, 1)
local queryResult = PhysicsAPI.RaycastSingle(pos, entityForward, queryParam)
-- 返回第一个被射线命中的实体 ID、距离、命中点和法线
print("ray hit entity: " .. tostring(queryResult.Entity.EntityId))
print("ray distance: " .. tostring(queryResult.Distance))
print("ray hit point:" .. tostring(queryResult.Position))
print("ray hit normal:" .. tostring(queryResult.Normal))本例中,射线从 RaycastSample 位置沿前方发射,命中实体则返回实体 ID、距离、命中点和法线。无命中则参数均为 0 或 [0,0,0],距离接近 0。
-
保存脚本并在 Play Mode 下测试。点击 控制台(Console) 查看射线命中详情。
