Dota 2 Workshop Tools/Scripting/API/Global.TraceCollideable=zh: Difference between revisions
< Dota 2 Workshop Tools | Scripting | API
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
[[Category:Global]] | [[Category:Global]] | ||
== | == 函数介绍 == | ||
Line 85: | Line 85: | ||
|} | |} | ||
== | == 输出参数 == | ||
被本函数添加到表中的成员。 | 被本函数添加到表中的成员。 | ||
{{Note | 如果未命中,则这些参数可能不存在。使用前检查是否为空。}} | {{Note | 如果未命中,则这些参数可能不存在。使用前检查是否为空。}} |
Revision as of 04:53, 8 October 2023

函数介绍
bool TraceCollideable(table parameters)
对单个实体执行光线跟踪。可以使用“mins”和“maxs”参数添加以实体为中心的额外边界框。
- Example
-- 沿轨迹从玩家的位置向前追踪100个单位,试图找到一个名为“my_prop”的实体。
-- 如果命中,将沿曲面法线在命中位置绘制一条线。
local playerEnt = Entities:FindByClassname(nil, "player")
local startVector = playerEnt:GetOrigin() + Vector(0, 0, 32)
local traceTable =
{
startpos = startVector;
-- 玩家前方100个单位的玩家位置
endpos = startVector + RotatePosition(Vector(0,0,0), playerEnt:GetAngles(), Vector(100, 0, 0));
ent = Entities:FindByName(nil, "my_prop"); -- Traces the entity named "my_prop"
-- 在模型上添加一个额外的20 x 20 x 20边界体。
mins = Vector(-10, -10, -10 );
maxs = Vector(10, 10, 10 )
}
TraceCollideable(traceTable)
if traceTable.hit
then
DebugDrawLine(traceTable.startpos, traceTable.pos, 0, 255, 0, false, 1)
DebugDrawLine(traceTable.pos, traceTable.pos + traceTable.normal * 10, 0, 0, 255, false, 1)
else
DebugDrawLine(traceTable.startpos, traceTable.endpos, 255, 0, 0, false, 1)
end
参数
类型 | 名字 | 介绍 |
---|---|---|
table | parameters | 用于输入和输出的表。 |
返回
bool - 追踪是否成功。这仅表示追踪已完成,而不是是否击中任何东西。
输入参数
传递到参数表以设置跟踪。
类型 | 名字 | 介绍 |
---|---|---|
Vector | startpos | 从指定全局向量处开始追踪。 |
Vector | endpos | 从指定全局向量处结束追踪。 |
CBaseEntity | ent | 欲追踪的实体。 |
Vector | mins | (可选)边界体的最小坐标。实体本地向量。 |
Vector | maxs | (可选)边界体的最大坐标。实体本地向量。 |
输出参数
被本函数添加到表中的成员。

类型 | 名 | 介绍 |
---|---|---|
Vector | pos | 存储命中位置的全局向量。 |
float | fraction | 在追踪轴上移动距离的百分比(?) |
bool | hit | 是否命中。始终会存在。 |
bool | startsolid | 跟踪是否在实体内部开始。![]() |
Vector | normal | 命中的曲面的全局法线向量。 |