Unity FixedJoint2D Bug

时间:2016-08-01 11:50:15

标签: c# unity3d game-physics unity5

我们正在尝试实施2D沙盒游戏,玩家可以在其中构建自己的“机器”。

所以我们在代码中做的是,我们将新对象转换到它应附加到的块的旁边,然后添加一个FixedJoint2D(个别是WheelJoint2D)来修复它。在某些时候我们注意到,当一个更复杂的机器(有许多部件)在施加过大的力时会变得不稳定。

慢动作中的错误记录: https://www.youtube.com/watch?v=Ym4LsuqMNfE

在视频“爆炸”发生之前,机器各部分的angularVelocity在某些时刻开始变得不稳定。在第9和第24天,机器的每个物体和它接触到的每个物体(strangley甚至是运动物体)都位于世界的中心(红色块后面),位于0,0。

有谁知道可能导致这种情况的原因?当有人告诉我们追踪此类问题的最佳做法时,它也会有所帮助。

编辑: 代码的简化版本。这就是我们的Update()方法的样子:

if (Input.GetMouseButtonDown(1) && ...) { connectSelectedBlock(); }

虽然connectSelectedBlock()看起来简化如下:

connectSelectedBlock(){ GameObject newBlock = Instantiate(blockToPlace); ... FixedJoint2D joint = gameObject.AddComponent<FixedJoint2D>(); joint.connectedBody = newBlock.GetComponent<Rigidbody2D>(); joint.autoConfigureConnectedAnchor = false; return joint; }

1 个答案:

答案 0 :(得分:0)

Unity中最昂贵,最耗时的活动之一是使用关节(等)来平衡物理对象。视频显示了物理交互不平衡导致的典型行为。通常,您会发现必须在每个“键”对象上放置一个脚本,以便您可以在运行时更改关节参数。这不是一件容易的事,我可以保证。此外,确保在FixedUpdate()方法中发生与物理相关的逻辑,在Update()中小心避免任何可能具有任何类型的Physics交互的操作。