ボールに振り子運動をつけて、この動きをずっとくり返してみましょう。
上部のオブジェクトの動きに合わせて、Sphereが左右にブラブラ動いています。
紐をつけてブラブラ降るような動きで、障害物をつくったり、いろいろ活用できそうな動作ですね。
関連記事:
Hinge Jointを使った振り子の動き
スプリングを使って棒を振るような動き
回転の往復をくり返す
ボールの振り子運動をくり返す
Cubeを作成し、Y座標を少しだけ上げます。
リジッドボディを追加して、質量を100、IsKinematicにチェックを入れます。
Sphereを作成し、HingeJoint(ヒンジジョイント)のコンポーネントを追加。
(ヒンジジョイントを追加すると、リジッドボディも一緒に追加されます。)
HingeJoint(ヒンジジョイント)を、以下のように設定しました。
Anchorは、ボディの揺れの中心となる軸の位置。
今回は「Anchor:2」に設定しました。
Cubeとのちょうど中間くらいにあることが確認できます。
軸には「Z:1」を入れています。
左右に振りますので、Zを軸に動くようにしました。
続いて、接続先であるCubeに動きをつけます。
CubeRotate.csを作成し、Cubeに追加します。
2秒おきに、左右に60°回転をくり返すように、CubeRotate.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeRotate : MonoBehaviour { private float time; private bool flag; void Start() { transform.Rotate(0, 0, 30); } void Update() { time += Time.deltaTime; if(time > 2.0f) { time = 0; StartCoroutine("CubeMove"); } } IEnumerator CubeMove() { if(flag) { for (int turn=0; turn<60; turn++) { transform.Rotate(0, 0, 1.0f); yield return new WaitForSeconds(0.01f); } flag= false; } else if(!flag) { for (int turn=0; turn<60; turn++) { transform.Rotate(0, 0, -1.0f); yield return new WaitForSeconds(0.01f); } flag = true; } } } |
ゲームプレイしてみましょう。
左右に向けて、振り子のような動作をくり返しています。