【Unity】振り子を作る

はじめに

倒立振子(紳士って変換すんのやめーや)をUnity上で再現できないか、と考えていて、その前準備としてHinge Jointの使い方を少し調べてみました。

なお以下のサイトを参考にしています。

matatabi-ux.hateblo.jp

(ただ上記記事はHinge Jointコンポーネントをアタッチする先が逆になっているものと思われるので、自分の方では振り子(動体)の方にHinge Jointコンポーネントを当てています。)

 

単独の振り子を作る場合

単独でぶらぶらさせるのは特に複雑なことはなく、(Rigidbodyのアタッチは当然なので割愛)揺れる対象にHinge Jointをアタッチし、揺れの軸Anchorを(ローカル座標なので)物体からどれだけ離すか設定すればいいだけです。Connected Bodyの設定が空だと動体はグローバル座標(空間?)にピン止めされたようになります。

f:id:kcha:20181111155146p:plain(左上の小さな矢印のようなものが揺れの軸です)このように動きます。 

f:id:kcha:20181111160024g:plain

 

何か動くものに振り子を繋ぐ場合

振り子が動くものにジョイントされるにはConnected Bodyに対象の動体をアタッチする必要があります。(今回は球の上にあるキューブです。)なおConnected Bodyの選択肢にオブジェクトがリストされるにはRigidbodyを持っていないといけないようで、上部のキューブにはRigidbodyをアタッチし、物理計算で落下しないようIs KinematicをOnにしてあります。

f:id:kcha:20181111154841p:plain(Connected BodyにPivot(キューブ)をセットし、Anchor位置をPivotと同位置になるようセット。)すると以下のようになります。(動体に留められていることが分かるよう、キューブには左右の移動アニメーションをつけています。)

f:id:kcha:20181111160452g:plain

(ジョイントが1個なのでキューブと球を繋いでいるのが棒に等しい。ジョイントを複数作れば鎖のようにできるのでしょうが。)

 

終わりに

参考サイトのほぼ丸写しではありますが、ヒンジを持ったオブジェクトの作成ができるようになりました。

Unityのリファレンスでの紹介では犬用ドア付きのドアを例に出していますが、ドアのHingeの軸をY軸に、犬用ドアのそれをX軸にすればいいのだけれど、(犬用ドアの)一部分が欠けたプレートをどうやって作るか頭が回らなくなってきたので、ここまで。

(だいぶ実験用プロジェクトの中身がごちゃごちゃになってきた。)