微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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"))

希望这可以帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐