Unity Rigidbody没有按预期行事(编写自定义刚体的任何想法?)

时间:2015-10-21 11:56:29

标签: c# unity3d rigid-bodies

在过去的几天里,我一直在研究一些定制汽车物理作为编码练习。

我的最终目标是在旧的GTA游戏的质量与最近的GTA 5之间建立一些半现实的汽车物理。

到目前为止,我得到的是一个相当复杂的过程,最终给了我一个浮动,这是我希望汽车到下一帧的确切速度,到目前为止我已经使用以下代码来做到这一点;

this.transform.Translate (0, 0, speed * Time.deltaTime);

然而,因为我想在物理中使用Unity构建进行碰撞检测,我意识到这不会起作用,因为transform.Translate(据我所知)字面上将对象置于该位置,因此对象可以(如果速度足够快)突然中途穿过一堵墙或完全忽略碰撞并出现在墙的另一侧。相反,我决定这样做;

rb.velocity = transform.forward * speed;

要快速注意,我在我的FixedUpdate中正在进行这两个操作,而且我目前只使用第二个示例(或者至少尝试使用它并且很难实现它)。由于它处于固定更新中,我应该能够在没有Time.Deltatime使用的情况下至少在一定程度上测试它,这就是为什么你现在没有在第二个例子中看到它。

继续我的故事,出于某种原因,当我设置刚体的速度而不是使用transform.Translate我的碰撞行为真的很奇怪。当我撞到墙壁时,汽车变得浮起并且向前轻推(站在它的鼻子上),我不知道是什么导致这种看见,因为我正在使用我自己的引力(来自原始Rigidbody的重力被关闭而有利于我自己的自定义引力,它确实导致向下的刚体力),并且刚体的阻力和角度阻力已经降低到0。

基本上我的问题是你们中的任何一个人都知道是什么原因可能导致我的刚体以这种方式作出反应,字面意思是我的正常代码和代码之间的唯一区别就是单行改变

感谢您的回答。

-Lars

编辑:已经过了几个小时。我已经选择使用rigidbody.AddForce(),但是它似乎根本没有做任何事情,而且最重要的是我编写汽车脚本的全部原因是确定速度对象应该移动,从而制作像rigidbody.AddForce()这样的东西,它将汽车的速度增加或多或少是多余的,不应该是必要的。

我甚至首先使用刚体的唯一原因是我可以做两件事:1。容易碰撞。这意味着我可以添加简单的力量,如重力,而不必担心它通过地板。 2.受物理影响时容易旋转,如碰撞。

如果有人对如何在自定义脚本中执行这两项操作有任何想法,我更愿意这样做,因为尽管我喜欢团结,Unity刚体物理在我眼中几乎毫无价值,但必须有因为我无法编写自己的自定义刚体,我也无法找到Unity Rigidbody的源代码。我宁愿拥有的是刚体的精简版本,它允许轻松碰撞和轻松旋转,但没有像拖曳或速度构建的所有东西,因为这些是我希望能够控制自己的确切事物到目前为止,当我使用transform.Translate时,我已经能够控制自己,但是当我必须使用rigidbody.velocity时,我失去了这个控制。

如果有人提前感谢任何想法。

Edit2:我现在已经解决了这个问题,我觉得因为没有早点意识到这一点而非常愚蠢。我所要做的就是用以下内容替换Translate;

rb.MovePosition (transform.position + transform.forward * (speed *     Time.deltaTime));

我还了解到,MovePosition基本上可以作为翻译(如果你这样做),除了它还会计算碰撞。

再次感谢任何想要帮忙的人!

2 个答案:

答案 0 :(得分:1)

根据文档,您不应该使用rb.velocity定期更改速度 - 这可能会导致不切实际的物理

http://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html

改为使用rb.addforce

http://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

希望这能解决问题!

答案 1 :(得分:0)

如果你想要超逼真的3D汽车物理,应该考虑以下现成资产: Edy的Vehice Physics https://www.assetstore.unity3d.com/en/#!/content/403

同样来自Unite2015会谈,参见示例项目:" EasySuspension"通过脚本构建示例3D汽车: http://bit.ly/1y8ucNW(来自视频:https://youtu.be/WGvuP6vV6j4?t=17m8s

或者是游戏自上而下的2D游戏? (比如早期的GTA')