资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

RayCaster

此类封装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
上一篇
Ray
下一篇
场景管理