【Unity 3D】斜视角下在水平面上物体跟随鼠标移动

本文讲述了Unity新手如何在3D场景中实现非坐标轴视角下的物体拖动,通过射线检测技术,结合摄像机的ScreenPointToRay函数,实现了鼠标控制下的物体沿指定平面移动,避免了复杂的坐标计算和穿模问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        本人unity 小白,最近在做毕业设计,需要拖动实验台上面的电学器件,经过不断查找发现只有沿着坐标轴的视角的代码,这就让我这种想做3D视角的很难受,于是研究了一番。

        摄像机的视野可以看成以摄像机为顶点的金字塔形状,再加上视角并不是沿着轴向,那么想让物体沿着不与金字塔底面平行的平面移动就不能使用下面这种方法:Camera.main.ScreenToWorldPoint (Input.mousePosition.x , Input.mousePosition.y , z);

        这段代码意思是获取鼠标在屏幕中的坐标并转换为世界坐标,其中z为得到的世界坐标与摄像机的距离,相当于将摄像机当作原点,面对方向为z轴得到的坐标。通过这种方法,鼠标离摄像机的距离要不不变,要不需要进行复杂的计算。

最后我的解决办法就是通过射线检测。

 Camera.main.ScreenPointToRay(Input.mousePosition);这个代码可以发射一条从摄像机到鼠标的射线,也就是说上面提到的z从一个定值或者变量变为了(0-∞)这样一个范围,接下来只需要检测物体以及平面在哪就行了。
      首先初始化

private Ray ra; //定义射线
private RaycastHit hit; //碰撞点
private Vector3 offset; //偏移
public bool is_element = false; //判断是否为element
public GameObject Element; //将碰撞获取的物体赋值给Element变量
private LayerMask mask = 1 << 8; //检测某层级

然后是按下鼠标,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值