在统一中,我有一个应该击球的球拍,并且球拍由鼠标直接控制,即使用鼠标轴移动球棒并使用transform.translate()函数移动球拍.
我预计Unity3d的物理不能直接用鼠标正确地转换球拍的动作并相应地击球,我必须写一些自定义的东西,结果证明是真的.
但是当球拍移动时球的碰撞没有被正确检测到.当它静止时,一切都很好,球就像我喜欢的那样.
现在我开始编写一个自定义物理脚本(我使用C#编写脚本),其中我将4个长度为0.6F的光线投影附加到球上,并且在做了一些复杂的矢量计算后,计算球击中球后的速度,并使用rigidbody.velocity = calculateVelocity()将其直接应用于球的速度.现在,当球拍没有移动时它再次正常工作,但是当我移动球拍时却没有.确切的(症状)问题是:
使用内置物理和碰撞检测:当球拍移动时,球有时直接穿过球拍,有时,它会减速(达到令人难以置信的水平).
使用我的脚本来计算速度:问题是一样的,但是当我打印对撞机(球拍)的法线时,它可以让我识别出什么是错误的.它有时给出正常的法线,有时给出法线向量的负值,这意味着它直接穿过顶面并用对撞机底部(球拍)检测击中.
我尝试过的事情:
增加对撞机的尺寸(它适用于球拍上较宽的框架对撞机,但显然球从球拍离开相当远的距离,我自己的脚本在这里工作,默认物理在球拍移动时给出奇怪的结果)总之,我没有得到我想要的现实.
将固定时间戳减少到0.001,这显着改善了事情,但仍然离我想要的结果非常远,并且球再次经常挑选球的错误一侧.
将碰撞检测更改为连续动态.哪个也没改善.
除了在碰撞中挑错的一方之外,我观察到的另一个问题是,在球拍弹跳后,球移动但是球拍移动得更快,而不是以完整的弧线或线移动,不知何故出现在前面球,导致两次安打.这是一个基于可见内容的猜想.
同样很明显,球拍的"运动"方面并没有被Unity3d的内置物理学所读取,当球拍使用鼠标击球时会导致奇怪的行为.
我卡住了,我不知道从哪里搬到这里.请告诉我,我做错了什么.