编程语言
首页 > 编程语言> > c#-Unity3d沿平面移动对象(仅X和Z轴)

c#-Unity3d沿平面移动对象(仅X和Z轴)

作者:互联网

我有一个Unity3D项目.该项目具有我创建的预制件(桌面),并以飞机作为顶部.这架飞机有一个箱大肠菌和刚体.在桌面上,我还有另一个对象.我只想围绕桌面(X和Z轴)移动该对象.切勿将物体抬高到桌面上方.我将以下代码附加到我的对象上:

void onm ouseDown()
{
    Debug.Log("mouse down");
    screenPoint = Camera.main.WorldToScreenPoint(transform.position);
    offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}

void onm ouseDrag()
{
    Debug.Log("mouse drag");
    Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
    transform.position = curPosition;
}

这样可以移动对象,但也可以将对象移动到桌面上方.有没有办法将物体放在桌子上?

解决方法:

听起来您正在寻找的是将mousePosition投影到表上. mousePosition最初位于屏幕空间(看起来就像您已被ScreenToWorldPoint识别),并且您需要从屏幕位置查找它命中的表的位置.

签出Physics.Raycast

有了这一点之后,就可以将对象的变换设置为该值,尽管您可能希望将该对象的垂直分量设置为一个恒定值,而不是结果值.

为此,您可能需要将表设置为碰撞层(如果尚未设置),并确保仅在查找该层.请注意,在Raycast中,layerMask是一个寄存器,由一个int表示(即[0 1 2..31]),因此您可以使用按位运算来选择图层,例如

layerMask = (1<<LayerMask.NameToLayer("Table"))

希望这可以帮助!

标签:unity5,unity3d,c
来源: https://codeday.me/bug/20191111/2022251.html