Wir versuchen ein 2D-Sandbox-Spiel zu implementieren, in dem der Spieler seine eigene "Maschine" bauen kann.Unity FixedJoint2D Fehler
Also, was wir im Code tun, ist, dass wir das neue Objekt direkt neben dem Block, an den es angehängt werden soll, transformieren und ein FixedJoint2D (bzw. WheelJoint2D) hinzufügen, um es zu reparieren. Irgendwann ist uns aufgefallen, dass eine komplexere Maschine (mit vielen Teilen) instabil werden kann, wenn zu viel Kraft auf sie ausgeübt wird.
Eine Aufzeichnung des Fehlers in Zeitlupe: https://www.youtube.com/watch?v=Ym4LsuqMNfE
Die Winkelgeschwindigkeit von jedem Teil der Maschine beginnt irgendwann instabil zu werden, bevor die „Explosion“ in dem Video passiert. Bei Sekunde 9 und 24 befindet sich jedes Objekt der Maschine und jedes Objekt, mit dem es in Berührung gekommen ist (würfelförmige, sogar kinematische Objekte), in der Mitte der Welt (direkt hinter dem roten Block) bei 0,0.
Weiß jemand, was das verursachen könnte? Es würde auch helfen, wenn uns jemand sagen könnte, was die besten Praktiken sind, um solche Probleme zu verfolgen.
Bearbeiten: Eine vereinfachte Version des Codes. Dies ist, wie unser Update() -Methode wie folgt aussieht:
if (Input.GetMouseButtonDown(1) && ...) { connectSelectedBlock(); }
während connectSelectedBlock()
wie dies vereinfacht aussieht:
connectSelectedBlock(){ GameObject newBlock = Instantiate(blockToPlace); ... FixedJoint2D joint = gameObject.AddComponent<FixedJoint2D>(); joint.connectedBody = newBlock.GetComponent<Rigidbody2D>(); joint.autoConfigureConnectedAnchor = false; return joint; }
Ich aktualisierte den Beitrag durch eine vereinfachte Version des Codes. Was vermissen wir dabei? Wenn Sie sagen "... damit Sie die Gelenkparameter zur Laufzeit ändern können", was meinen Sie genau? Welche Gelenkparameter? Jede Information würde uns helfen. – Yggdrasill