c#-Unity3d沿平面移动对象(仅X和Z轴)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-Unity3d沿平面移动对象(仅X和Z轴),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1318字,纯文字阅读大概需要2分钟。
内容图文
我有一个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识别),并且您需要从屏幕位置查找它命中的表的位置.
有了这一点之后,就可以将对象的变换设置为该值,尽管您可能希望将该对象的垂直分量设置为一个恒定值,而不是结果值.
为此,您可能需要将表设置为碰撞层(如果尚未设置),并确保仅在查找该层.请注意,在Raycast中,layerMask是一个寄存器,由一个int表示(即[0 1 2..31]),因此您可以使用按位运算来选择图层,例如
layerMask = (1<<LayerMask.NameToLayer("Table"))
希望这可以帮助!
内容总结
以上是互联网集市为您收集整理的c#-Unity3d沿平面移动对象(仅X和Z轴)全部内容,希望文章能够帮你解决c#-Unity3d沿平面移动对象(仅X和Z轴)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。