質問: ### 前提・実現したいこと Unitiy2Dで開発を進めております。 ヒンジジョイントの回転軸となる「ピン」と回転するオブジェクトの「棒」が存在します。 ともにリジットボディーが付けられています。 棒の重心は棒の中心にあります(これは変更したくありません)。 棒はたまごの殻のように中は空間があります。 実現したいことは,単純で,「ピンを軸に棒を回転したい」ということです。 後述いたしますが,力を加えると問題が起きてきます。 ### 試したこと 棒にヒンジジョイントをアタッチして,以下のように設定しました。 > > > ConnectedrigidBody「ピン」 > > 衝突は「無効」 > > アンカーの接続設定を自動化「無効」 > > 接続されたアンカー「棒の回転する棒の相対座標」 > > アンカー「X:0 Y:0」 > > モーターの使用「無効」 > > AngleLimits「応力:Infinity トルク:Infinity」 > > > これで,重力を受けて回転する程度ならば問題なく,ピンを中心にぶらぶらしてくれました。 図の〇の中に×があるのがピンで,ぶら下がっているのが,棒です。 棒の黄色の枠の中は空間です。黄色内側の黒い部分にコライダーで覆っています。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/3ee191e1edf430b8cb0ca8715818da6b.png) ### 発生している問題・エラーメッセージ 問題は,棒に力を加えたときに,回転軸がずれていってしまうということです。 棒の中に青ボールを入れ,互いが反発するようにスクリプトが組まれています。 ボールが棒の内壁に当たって棒に力を加えます。(ちなみに,棒とボールの質量比は1:1です(これは変えがたい))。 すると,回転軸がずれます。 表現しづらいですが,ヒンジジョイントの回転軸がずれ,伸びている感じです。図をご覧ください。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/686ce27cba6ba117360ec80822e4e88f.png) シーンで確認すると,ピンからアンカーまで,黄緑?の線が出ているのが見えます(伸びてる?)。 棒に大きな力が加えられると,回転軸がずれてしまいます。 仮に,棒の質量を200ぐらいにしても同じようにヒンジジョイントが伸びました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/1a5ea547e8713f9e2f4b1e444b7c4dae.png) ### 試したこと2 ピンから棒が離れてほしくないので,ディスタンスジョイントもついでにつけてみました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/12c848b4fab23735d1da480b1f309f41.png) これでもだめでした。 「Unity ヒンジジョイント ずれ」などでヒットするサイトを色々と見ましたが,的を得ることができませんでした。 ### 論点 1ヒンジジョイントなどの設定がそもそも間違っているのか。 2ヒンジジョイントなどの設定が正しいならば,このような状況下では,ヒンジジョイントでは回転軸を固定することができないのか(Unityの仕様でどうしてもずれてしまうものなのか)? 32がUnityの仕様で仕方がないことであれば,ヒンジジョイント以外で,回転軸をずれないように,棒がぶらぶらするようなこと(ピンの位置は棒のどの位置でも設定できる)を実装するにはどのようにしたらよいのか? よろしくお願いいたします。 ### 補足情報(FW/ツールのバージョンなど) unity2018 2D Windows10
回答: それなりに解決策が見つかったので報告します。 結論から申しますと, 「オブジェクトの重心座標を平行移動させて元に戻す」 という方法です。 図をご覧ください。 !オブジェクトの平行移動 オブジェクトの重心座標(xG,yG) ヒンジジョイントのピボットになる座標(xp,yp) オブジェクトのヒンジジョイントのアンカーの座標(xp′,yp′) まず,ピボット座標とアンカー座標の差を求めます。 a =(xp,yp)-(xp′,yp′) これをa(ベクトル)として,そのベクトル分だけ,オブジェクトの重心を平行移動させます。 (xG,yG) + a これを毎フレームで監視させれば,何とか持ちこたえてくれます。 ただし,質量を膨大にすると,一瞬で落ちるので,ヒンジが外れてはもどりを繰り返し,微振動してしまいます。 そこまで,質量を大きくすることはないので,私は「これで良し」としました。