【发布时间】:2011-09-09 16:47:00
【问题描述】:
在统一中,我有一个应该击球的球拍,球拍由鼠标直接控制,即鼠标使用鼠标轴移动球拍并使用 transform.translate() 函数移动球拍。
我预计 Unity3d 的物理不会直接通过鼠标正确转换球拍的运动并相应地撞击球,我必须编写一些自定义的东西,结果证明是真的。
但是当球拍移动时没有正确检测到球的碰撞。当它静止时,一切都很好,球的表现也如我所愿。
现在我编写了一个自定义物理脚本(我使用 C# 编写脚本),其中我将 4 个长度为 0.6F 的射线投射附加到球上,并在进行了一些复杂的矢量计算之后,计算球的速度击中球拍,并使用rigidbody.velocity = calculateVelocity() 将其直接应用于球的速度。现在,当球拍不移动时,它又可以正常工作了,但当我移动球拍时就不行了。问题的确切(症状)是:
使用内置物理和碰撞检测:当球拍移动时,球有时会直接穿过球拍,有时会减速(达到难以置信的水平)。
使用我的脚本计算速度:问题是一样的,但是当我打印对撞机(球拍)的法线时,它可以让我找出问题所在。它有时给出正确的法线,有时给出法线向量的负值,这意味着它直接穿过顶面并检测对撞机(球拍)底部的撞击。
我尝试过的事情:
增加碰撞器的大小(它适用于球拍上较宽的盒子碰撞器,但显然球从距离球拍很远的地方移动,我自己的脚本在这里工作,默认物理给出奇怪球拍移动时的结果),总之我没有得到我想要的现实。
-
将固定时间戳减少到 0.001,这显着改善了情况,但与我想要的结果仍然相去甚远,而且球再次经常选择错误的一侧。
将碰撞检测更改为连续动态。这也没有改善。
除了在碰撞时选择了错误的一侧,我观察到的另一个问题是,球从球拍上弹起后,球在移动,但球拍移动得更快,它不是以某种方式沿着完整的弧线或直线移动出现在球的前面,造成两次安打。这是基于可见事物的猜想。
此外,很明显,Unity3d 的内置物理系统没有读取球拍的“运动”方面,导致当球拍移动时使用鼠标击球时出现奇怪的行为。
我被困住了,我不知道从这里搬到哪里。请告诉我我做错了什么。
【问题讨论】:
标签: collision-detection unity3d game-physics