Cou氏の徒然日記

ほのぼの日記ブログです。

Unityで遊ぼう [振り子編 その3:ニュートンのゆりかご]

前回で、紐付きの振り子を作成しました。

www.youtube.com

 

これで振り子で色々とできそうですね。

今回実は作ってみたかったのは、ニュートンのゆりかご

ja.wikipedia.org

 

ということで、紐付き振り子をPrefab(プレハブ)化して、これを複製。

 

ただ、このままだと、球と球の接触時の動作を設定していないので、衝突したらそのまま止まってしまいます。

そのため、Physical Materialを生成。

これの反発係数(Bounceness)を「1」に設定して、Sphereオブジェクトにアタッチします。

 

座標を少し調整して実行してみると・・・

youtu.be

いい感じの反発具合。

もちろん現実でもそうですが、徐々に減衰していきます。ただ、十分です。

あとはこれに振り子オブジェクトを増やしていけば良さそうです。

 

ということで、プレハブから5個複製。

1つだけSphereの高さを変えて、残りはぶら下げた状態に。

これで実行してみると…

 

youtu.be

うーむ…。

力の伝わり方が微妙なのか、期待した動作になりません。

何かがよくないみたいですね。

 

調べてみると、Sphereオブジェクト同士が最初から接している状態で衝突させていることがよくなさそうとのこと。

(物理演算を行う上で、オブジェクトの衝突が発生した瞬間に3つ以上のオブジェクトが接触している状態だと、計算が複雑になったり、期待した通りに演算されず想定した結果にならないといったことが発生しうるみたいです。)

上記のことから、オブジェクト同士を非接触状態としておくことで、接触タイミングに2つのオブジェクトだけが接している状態にできるのがベターなようです。

 

そのため、振り子オブジェクトの位置を微調整。

具体的には、各オブジェクトのScaleが「1」なので、配置間隔を「1.1」にしてみました。

 

この状態で実行してみると・・・

youtu.be

おお! 思ったよりいい感じに

ただ、当たったときの反動で球の揺れが発生し、途中からはボールの位置がずれ、動きが変わってしまいました(笑)

厳密に作ろうとすると、もっとしっかりとしたパラメータ設定しないといけないんでしょうね。

実際、色々とオブジェクトの位置、スケールやPhysical Materialの値をいじったりしてやってみましたが、きれいには作れませんでした。

youtu.be

もっと試行錯誤しないとダメそうです。

 

でも、思ったよりいい感じにできて良かったです。