1、正常情况,直接点击屏幕,然后调用Camera.screenPointToRay(x: number, y: number, out?: geometry.Ray),都能正常捕获触摸事件。
2、如果将3D 相机映射的内容绘制到 UI ,这个时候再次点击屏幕方案1相同位置,就不能捕获触摸事件了。
如果用方案2,怎么才能正确捕获触摸事件呢?
1、正常情况,直接点击屏幕,然后调用Camera.screenPointToRay(x: number, y: number, out?: geometry.Ray),都能正常捕获触摸事件。
2、如果将3D 相机映射的内容绘制到 UI ,这个时候再次点击屏幕方案1相同位置,就不能捕获触摸事件了。
如果用方案2,怎么才能正确捕获触摸事件呢?
啥意思,你都映射到UI上了,直接注册2d点击事件不就好了嘛
我是想点击3D物体的。
这可能要做很复杂的换算,screenPointToRay是全屏比例下才能实现点击的效果,如果3D映射所在的node的不是全屏的,并且可能存在缩放比例的调整(比如你的屏幕是4:3,但rendertexture所在的sprite节点可能是别的比例,如:4:4),这中情况下直接使用touch事件返回的xy在screenPointToRay的计算结果会不准确。
解决方案:
要把屏幕的点击坐标换成到UI node的局部坐标,并根据UI node的缩放和屏幕比例算出基于屏幕原始的点击x,y,才可以用Camera.screenPointToRay。
如果你确定两次设置下点击的位置是相同的,那就在控制台打印一下x,y。只要这里的x,y相同,那判定就是一致的。
是的,要做换算。
断点发现,Camera设置Target Texture后,Camera的尺寸都不一样。