私たちは、プレーヤーが自分の「マシン」を構築できる2Dサンドボックスゲームを実装しようとしています。Unity FixedJoint2Dバグ
私たちがコードで行うことは、新しいオブジェクトを添付するブロックのすぐ隣に配置し、それを修正するためにFixedJoint2D(個々のWheelJoint2D)を追加することです。しかし、私たちが気づいた時点では、機械が多すぎると(多くの部品を含む)、あまりにも多くの力が加えられると不安定になることがあります。
スローモーションのバグの記録: https://www.youtube.com/watch?v=Ym4LsuqMNfE
マシンのすべての部分の角速度は、ビデオで「爆発」が起こる前に、いくつかの点で不安定になることを開始します。 2番目の9と24では、機械のすべてのオブジェクトと、それが接触したすべてのオブジェクト(ストレンジリーの運動学的オブジェクト)は、0,0の世界の中心(赤いブロックのすぐ後ろ)にあります。
これを引き起こす原因は誰にも分かりますか?また、そのような問題を追跡するベストプラクティスを教えてくれる人がいると助けになります。
編集: 簡略化されたコードです。これが私たちのupdate()メソッドがどのように見えるかです:connectSelectedBlock()
は、次のように簡略化され見えますが
if (Input.GetMouseButtonDown(1) && ...) { connectSelectedBlock(); }
:ユニティの中で最も高価で時間のかかる活動の
connectSelectedBlock(){ GameObject newBlock = Instantiate(blockToPlace); ... FixedJoint2D joint = gameObject.AddComponent<FixedJoint2D>(); joint.connectedBody = newBlock.GetComponent<Rigidbody2D>(); joint.autoConfigureConnectedAnchor = false; return joint; }
私はコードを簡略化したバージョンで投稿を更新しました。これを行う際に何が欠けていますか? 「...実行時に関節パラメータを変更できるように」と言うと、正確にはどういう意味ですか?どちらの関節パラメータ? どんな情報でも私たちを助けてくれるでしょう。 – Yggdrasill