RayCaster
更新时间:2021-06-17
此类封装RayCaster相关操作,RayCaster类提供模型拾取相关能力,包含屏幕射线生成、随屏与非随屏节点拾取等。
Public methods | |
---|---|
RayCaster | ray_from_screen 获取从屏幕点向场景中垂直发出的射线 |
RayCaster | get_hit_result 获取从屏幕点向随屏空间中垂直发出的射线 |
RayCaster | hud_ray_from_screen射线的拷贝构造函数 |
RayCaster | get_hud_hit_result 获取与该射线相交的随屏结果 |
Demo | |
---|---|
RayCaster Demo | RayCaster RayCasterDemo ()Demo示例 |
RayCaster Demo
RayCaster RayCasterDemo ()
demo示例
sample:
local ray_caster = scene:get_input_controller():get_ray_caster()
local ray = ray_caster:ray_from_screen(screen_point)
--拾取射线在场景中相交的第一个节点
local hit_result = ray_caster:get_hit_result(ray, "first_hit")
io.write("hit type = "..hit_result["type"])
local result = hit_result["result"]
if (result[0] ~= nil) then
local node = result[0]["node"]
local distance = result[0]["distance"]
if (node ~= nil) then
local name = node:get_property_string("name")
io.write("hit entity with node = "..name.." distance = "..distance)
end
end
--拾取射线在场景中相交的所有节点
local hit_result = ray_caster:get_hit_result(ray, "all_hit")
io.write("hit type = "..hit_result["type"])
local result = hit_result["result"]
for key, value in pairs(result) do
io.write("hit entity with i = "..key)
local node = value["node"]
local distance = value["distance"]
if (node ~= nil) then
local name = node:get_property_string("name")
io.write("hit entity with node = "..name.." distance = "..distance)
end
end
ray_from_screen
API起始版本:190
Ray ray_from_screen(screen_point)
获取从屏幕点向场景中垂直发出的射线
Parameters
- ARVec2 | screen_point : 屏幕坐标,起点为屏幕左上角
Returns
- Ray : 从屏幕点向场景中发出的射线
sample:
local ray = ray_caster:ray_from_screen(ae.ARVec2:new_local(100,100))
get_hit_result
API起始版本:190
LUATABLE get_hit_result(ray, hit_type)
获取与该射线相交的非随屏结果
Parameters
- Ray | ray : 射线
- string | hit_type : 拾取结果的类型("first_hit" - 返回第一个相交的结果, "all_hit" - 返回所有相交的结果)
Returns
- LUATABLE : 相交结果("type"-拾取类型; "result"-拾取结果数组,数组key为0至#(result)-1,value为拾取结果LUATABLE; 拾取结果LUATABLE中有字段"node"为拾取对象节点,"distance"-射线到拾取节点的距离)
sample:
local ray = ray_caster:ray_from_screen(ae.ARVec2:new_local(100,100))
local hit_result = ray_caster:get_hit_result(ray, "first_hit")
local type = hit_result["type"]
local result = hit_result["result"]
if #(result) > 0 then
local node = result[0]["node"]
local distance = result[0]["distance"]
end
hud_ray_from_screen
API起始版本:190
Ray hud_ray_from_screen(screen_point)
获取从屏幕点向随屏空间中垂直发出的射线
Parameters
- ARVec2 | screen_point : 屏幕坐标,起点为屏幕左上角
Returns
- Ray : 从屏幕点向随屏空间中发出的射线
sample:
local ray = ray_caster:hud_ray_from_screen(ae.ARVec2:new_local(100,100))
get_hud_hit_result
API起始版本:190
LUATABLE get_hud_hit_result(ray, hit_type)
获取与该射线相交的随屏结果
Parameters
- Ray | ray : 射线
- string | hit_type : 拾取结果的类型(含义同get_hit_result)
Returns
- LUATABLE : 相交结果(含义同get_hit_result)
sample:
local ray = ray_caster:ray_from_screen(ae.ARVec2:new_local(100,100))
local hit_result = ray_caster:get_hud_hit_result(ray, "first_hit")
local type = hit_result["type"]
local result = hit_result["result"]
if (result) > 0 then
local node = result[0]["node"]
local distance = result[0]["distance"]
end