案例:
1,创建一个游戏场景,在场景(0,0,0)位置创建一个平面做为地面,主摄像头位置为(0,10,0),角度(-90,0,0),也就是摄像机在空中10米俯瞰地面。
2,创建一个全屏幕UI节点,监听点击事件。
3,现在想要点击屏幕,然后把屏幕坐标位置转换为3d场景的地面平面的位置。
所以按引擎案例实现功能,以屏幕中心(0,0)位置做测试。
var wpos = mainCamera.screenToWorld(new Vec3(0, 0 ,10)); //z轴填10,是因为摄像头在天空10米处
console(wpos.x, wpos.y, wpos.z) //把位置输出
//期望得到世界坐标为(0,0,0)
//结果输出为:(x: -1.3312, y: 8.7029, z: 0.7488)
输出的结果轴位置 在8米处,离地面还很高
我是因为有个功能需要把屏幕上某个UI的位置转换为摄像头前方某个距离的场景3d世界坐标,目前摄像头的screenToWorld函数无法把UI位置转换为3d世界坐标。
Unity 屏幕坐标转换3d世界坐标很容易实现
Vector3 wpos = Camera.main.ScreenToWorldPoint(new Vector3(屏幕坐标x, 屏幕坐标y, 3d摄像头前方距离);
//
Creator3.x太难实现了
如果你0,0是想说屏幕中心的话要传实际屏幕尺寸的一半才是屏幕中心

这个文章里说的就是···这个不对