🔍 跟踪
🎒 示例
Client/Index.lua
-- 获取本地玩家
local local_player = Client.GetLocalPlayer()
-- 获取相机旋转和位置
local camera_rotation = local_player:GetCameraRotation()
local start_location = local_player:GetCameraLocation()
-- 根据相机旋转计算方向向量
local direction = camera_rotation:GetForwardVector()
-- 计算跟踪的终点位置
-- (起点位置 + 沿相机方向延伸 20000 个单位)
local end_location = start_location + direction * 20000
-- 过滤所有想要检测的碰撞通道(例如 WorldStatic、WorldDynamic、PhysicsBody、Vehicle)
local collision_trace = CollisionChannel.WorldStatic | CollisionChannel.WorldDynamic | CollisionChannel.PhysicsBody | CollisionChannel.Vehicle
-- 定义跟踪的参数
-- TraceMode.TraceOnlyVisibility 表示只对可见物体进行跟踪
-- TraceMode.DrawDebug 表示我们要绘制跟踪的调试线以实现可视化
-- TraceMode.TraceComplex 表示我们要针对复杂的碰撞形状进行跟踪
-- TraceMode.ReturnEntity 表示我们要返回被射线击中的实体
local trace_mode = TraceMode.TraceOnlyVisibility | TraceMode.DrawDebug | TraceMode.TraceComplex | TraceMode.ReturnEntity
-- 执行跟踪
local trace_result = Trace.LineSingle(start_location, end_location, collision_trace, trace_mode)
-- 如果跟踪成功
if (trace_result.Success) then
-- 如果获取到了实体,则打印碰撞实体的名称,否则只打印位置
if (trace_result.Entity) then
Console.Log("跟踪成功!实体:" .. trace_result.Entity:GetClass():GetName() .. "。位置:" .. tostring(trace_result.Location))
else
Console.Log("跟踪成功!位置:" .. tostring(trace_result.Location))
end
else
-- 如果跟踪失败,则打印消息
Console.Log("跟踪失败")
end