UnityのSpring Jointを使う 2


はじめに

UnityのSpring Jointを使う の続きです。

上からばねにモノを落とす。

準備

玉(sphere)を上から落とします。Transform, Rigidbodyを以下のように設定してください。

上のCubeはMassを1にします。

下のCube(1)はSpring JointコンポーネントのMin, Max Distanceおのおの4にしてみましょう。Springは大判振る舞いで100000。

落とす

実行すると、最初はCubeは動かないはずです(Min Distanceが4だから)。そのあと、玉が落ちてきて下がり、また上がります。グラフにすると以下の通りです。グラフ作成にはMonitor Componentsアセットを使いました。

Cubeはいったん約0.75下がりますが、すぐに元の長さに戻っています。これは、元の長さがMax Distanceに等しいからです。玉はバウンドし、Y = 4.15まで上がります。

次に、Min Distanceが3にし、下のCube(1)の位置を1上げて-4にします(こうしないと、実行開始時にCubeがmin distanceの長さに移動してしまう)。それで実験すると、Cubeは先ほど同じく約0.75下がりますが、そのあと大きく伸びて、初期位置から約1上(Max Distanceに相当)に上がります。つまり、振れ幅は約1.75になるわけです。玉のバウンドの仕方は変わりません。

さらに、Min Distanceが2にし、下のCube(1)の位置を1上げて-3にしたらどうなるでしょうか。もう予想がつきますね。Cubeは先ほど同じく約0.75下がりますが、そのあと大きく伸びて、初期位置から約2上(Max Distanceに相当)に上がります。つまり、振れ幅は約2.75です。玉のバウンドの仕方はやはり変わりません。

まとめ

最後に、上の3条件を同時に。左からmin distance 4, 3, 2です。max distanceは4で固定です。

このように、Max distanceが固定の場合、min distanceが小さいほど、力が加わった時、最初の縮みは同じでも、縮んでから戻る際の振れ幅の大きいバネになります(力が加わった時の最初の縮みはSpringの値で決まる)。しかし、それによって球を持ちあげる距離に差はありません。