我们正在尝试实现一个2D沙盒游戏,玩家可以在其中建造自己的“机器”。
因此,我们在代码中所做的是,将新对象转换为将要附加到的块旁边,并添加了FixedJoint2D(分别为WheelJoint2D)进行修复。但是,在某些时候,我们注意到,如果对机器施加过多的力,则它会变得更加不稳定(具有很多零件)。
慢动作错误的记录:
https://www.youtube.com/watch?v=Ym4LsuqMNfE
在视频中的“爆炸”发生之前,机器各个部分的angularVelocity在某些时候开始变得不稳定。在第二个9和24,机器的每个对象及其与之接触的每个对象(甚至是运动物体都处于勒紧状态)都位于世界的中心(红色方块后面)为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;}
最佳答案
Unity中最昂贵,最耗时的活动之一是使用关节(等)平衡物理对象。该视频显示了典型行为,这是不平衡的物理相互作用的结果。通常,您会发现必须在每个“键”对象上放置一个脚本,以便可以在运行时更改联合参数。这不是一件容易的事,我可以保证。另外,请确保与物理相关的逻辑发生在FixedUpdate()方法中,请谨慎地避免在Update()中进行任何可能具有任何物理相互作用的操作。