physics.rayCast()

类型 函数
physics.*
返回值 描述每次碰撞的表数组
修订 版本 2024.3703
关键词 射线, 光线投射, 投射, 物理, 碰撞
另请参阅 physics.reflectRay()

概述

此函数用于查找与直线碰撞的对象以及沿该直线的碰撞点。

返回的位置在内容空间中,而返回的法线在局部空间中。

注意事项

如果起始位置在对象内部,则不会为该对象注册碰撞。

语法

physics.rayCast( fromX, fromY, toX, toY, behavior )
fromX (必需)

数字 射线的起始 **x** 位置。

fromY (必需)

数字 射线的起始 **y** 位置。

toX (必需)

数字 射线的结束 **x** 位置。

toY (必需)

数字 射线的结束 **y** 位置。

behavior (可选)

字符串 碰撞测试行为,按性能成本递增的顺序排列

  • "any" — 返回一个结果,但不一定是最近的结果。
  • "closest" — 仅返回距起点最近的碰撞(如果有)。这是默认行为。
  • "unsorted" — 返回所有结果,顺序不限。
  • "sorted" — 返回所有结果,按从近到远排序。

结果属性

hits 将是一个包含以下属性的元素数组

示例

local hits = physics.rayCast( 0, 0, 200, 300, "closest" )

if ( hits ) then

    -- There's at least one hit
    print( "Hit count: " .. tostring( #hits ) )

    -- Output the results
    for i,v in ipairs( hits ) do
        print( "Hit: ", i, v.object, " Position: ", v.position.x, v.position.y, " Surface normal: ", v.normal.x, v.normal.y )
    end

    print( "The first object hit is: ", hits[1].object, " at position: ", hits[1].position.x, hits[1].position.y, " where the surface normal is: ", hits[1].normal.x, hits[1].normal.y, " and where the fraction along the ray is: ", hits[1].fraction )
else
    -- No hits on raycast
end