本人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; //检测某层级
然后是按下鼠标,