なかなかまとまった時間やモチベーションがなく、触っていませんでしたが、
この前、別件でUnityのRuntime Feeの話でUnityの話題が出てきたので、
またUnityでちょっと何かやってみようかなと思い、久々に起動。
今まで、
■ ボール転がしゲーム
をお遊び的に少し作りました。(別にゴール条件とか真面目に定めていない超簡易的なものですが…)
あとは別件で、ML-Agentを利用した機械学習も。
■ 振り子の支点と球の作成
今回作ってみようと思うのは『振り子』。
適当にSphere(球)オブジェクトを作り、Regidbody (物理運動の設定) を追加。
(久々なのでアタッチの仕方を忘れていますが、過去の自分の記事で思い出し作業(笑))
オブジェクトを選択した状態で
[Component] -> [Physics] -> [Regidbody]
で追加。
これで重力で落ちるようになりました。
続いて振り子の固定点にするオブジェクトをCubeで作成し、Regidbodyを追加。
ただ、こちらも同じ設定してしまうと、上で作ったSphere(球)と同じで、重力で落ちてしまい、固定できないため、物理演算無視の設定を有効に。
Regidbodyの中の「Is Kinematic」にチェックを入れることで、物理演算の影響を受けなくなります。
これで、
- Sphereオブジェクト:重力影響(物理演算の影響)を受ける
- Cubeオブジェクト:重力影響(物理演算の影響)を受けない
ことになります。
SphereオブジェクトをCubeオブジェクトの上に設置してスタートすると、
Sphereオブジェクトは落下、Cubeオブジェクトは空間内に固定され、Sphereオブジェクトの上に乗っかります。
(Physical Material(衝突時の設定)とかは設定していないので、衝突したらそのまま停止)
■ 2つのオブジェクトの紐づけ (Hinge Joint)
あとはこの二つをつなげばよいのですが、以前はこの紐の作り方がわからなかったんですよね。
そのために使えばよいのが「Hinge Joint」のようです。
Hinge Joint は、2 つの リジッドボディ をグループ化し、互いにヒンジで連結されているかのように制約します。ドアに最適ですが、鎖や振り子などをモデル化するのにも使用できます。
つまり、Cube(支点用の立方体)の Rigidbody と Sphere(振り子の球)のRegidbody をグループ化して連携させることができるようです。
ということで、まずは、
- Cubeの位置 = (0, 0, 0)
- Sphereの位置 = (5, 0, 0)
に設定し、Cubeに「Hinge Joint」を追加。
関連付けの対象(Connected Body)に「Sphere(球)」オブジェクトを選択。
そして、Axis を (x, y, z) = (0, 0, 1) に設定。(*1)
(*1) z軸方向を固定、x軸(横)とy軸(上下)方向には動かしたいため。
Aucherなどの距離計算は面倒なので、「Auto Configure Connection」はチェックを入れて、自動計算してもらうようにして、この設定で実行。
無事に振り子運動が始まりました。
何を使えばいいかが分かれば結構簡単でした。
ただ、まだオブジェクト同士が離れている(ように見えてしまう)ので、紐的なものを追加していきたいですね。