2016-08-01 5 views
2

私たちは、プレーヤーが自分の「マシン」を構築できる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; }

答えて

0

一つは、バランスを取ることですジョイントを使用する物理オブジェクト(および同様のもの)。ビデオは、不均衡な物理的相互作用の結果である典型的な挙動を示しています。非常に頻繁に、実行時にジョイントパラメータを変更できるように、各「キー」オブジェクトにスクリプトを配置する必要があることがわかります。簡単な仕事ではなく、私はそれを保証することができます。また、フィジックス関連のロジックがFixedUpdate()メソッドで発生していることを確認し、物理的な相互作用がある可能性のある操作をUpdate()で慎重に避けてください。

+0

私はコードを簡略化したバージョンで投稿を更新しました。これを行う際に何が欠けていますか? 「...実行時に関節パラメータを変更できるように」と言うと、正確にはどういう意味ですか?どちらの関節パラメータ? どんな情報でも私たちを助けてくれるでしょう。 – Yggdrasill