欢迎光临散文网 会员登陆 & 注册

Unity获取鼠标所在的世界坐标(附跟随鼠标转动)

2020-11-11 14:49 作者:白白_可乐  | 我要投稿


好久没有写专栏了,趁着今(1)天(1)过(1)节(1)等外卖就来一篇.


虽然 Unity 提供了

Camera.ScreenToWorldPoint

这么个 API ,但是很多小伙伴在使用这个接口的时候还是会出现一些莫名其妙的问题,这是因为该接口的功能正如字面所说 Screen(屏幕) to World(世界),这个转换的介质,是基于 Camera(相机)的,大家有没有想到一个问题,我们的摄像机在通常情况下和地面或者玩家之间 ,是有一段距离的,而这段距离,就成了问题的多发区.

众(使用Unity进行开发的小伙伴们)所周知,Unity 的摄像机拍摄方式有两种,透视(Perspective)正交(Orthographic)

其中透视的的摄像机是一个,而正交的摄像机则是一个


摄像机的透视与正交


[理论基础]我们在调用 ScreenToWorld 的时候, 鼠标和摄像机是处于同一的平面的,这就导致了,如果我们直接使用 Input.Mouse Position 作为参数的话,结果是和相机一个平面,如果是正交还好,因为起码是一个面,但是透视则怎么都只是一个点.


屏幕点击测试

使用此脚本进行测试.

分别在屏幕的四个角点击得到的结果.

可以看到,透视模式下控制台返回的结果都是同样的一个点(主摄像机的位置)


有了前面的理论基础后,再要解决问题就变得简单了,即,在使用接口将鼠标坐标转换之前,先修正鼠标坐标的Z值,以下代码适用于默认场景,主要物品Z轴为零的情况,小伙伴们可以根据自己的需求将其改造成适合自己项目的代码.

可以看到,在修改了Z值之后,点击可以正确获取世界坐标.


[以下内容投币可见]

DLC——物品跟随鼠标转向

物品转向代码

效果如下:

跟随鼠标转动

都看到这里啦~


欢(下)迎(次)投(一)币(定)

Unity获取鼠标所在的世界坐标(附跟随鼠标转动)的评论 (共 条)

分享到微博请遵守国家法律