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