gpt4 book ai didi

c# - Unity FixedJoint2D Bug

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:53 25 4
gpt4 key购买 nike

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

所以我们在代码中所做的是,我们将新对象转换到它应附加到的 block 旁边,并添加一个 FixedJoint2D(相应的 WheelJoint2D)来修复它。但在某些时候,我们注意到,当对它施加太大的力时,一台更复杂的机器(有很多零件)可能会变得不稳定。

BUG慢镜头记录: https://www.youtube.com/watch?v=Ym4LsuqMNfE

在视频中的“爆炸”发生之前,机器每个部分的角速度在某个时刻开始变得不稳定。在第 9 秒和第 24 秒,机器的每个对象和它接触到的每个对象(奇怪的甚至是运动对象)都位于世界中心(在红色 block 后面),位置为 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() 中小心避免任何可能具有任何类型的物理交互的操作。

关于c# - Unity FixedJoint2D Bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com