ばねがつながった物体の運動(単振動)
フックの法則
ばねは変形すると元に戻ろうとする性質があるため、ばねを伸ばせば伸ばすほど元に戻ろうとする力(弾性力)は大きくなります。
フックの法則とは、ばねから受ける力の大きさは伸びに比例するという法則です。このときの比例定数をばね定数といいます。
復元力とは
物体が振動の中心からずれたときに、振動の中心に戻そうとする力のことです。振動中心からのズレ(変位)に復元力は比例します。
復元力Fは、振動中心からの変位をx、比例定数をKとして、$$F=-Kx$$とかけます。ただし、振動中心は\( x=0\)です。x>0のときF<0となるので、図の右側にずれたとき、復元力は負の向き(図の左側)に向きます。また、x<0のとき、F>0となるので、同じように復元力は必ず振動中心を向くことがわかります。
ばねは復元力の代表のようなものですが、他にも万有引力、浮力、静電気力などの力が復元力としてはたらく問題も目にします。
Unityで必要なオブジェクトを作成、設定する
GameObject → 3D Object からCubeとSphereを作成し、それぞれ「Center」、「Sphere」とリネームします。そして、それぞれのTransformを以下のように設定します。
また、Main CameraのTransformも以下のようにします。
SphereのInspectorの一番したにあるAddComponentからRigidbodyを追加します。そして、「Use Gravity」のチェックを外しておきます。また、Sphere Collider Componentの中にある「is Trigger」にチェックを入れます。これは、Sphereを振動させた時に、中心にあるCubeオブジェクトにぶつからず、透過させるためです。
Unityで弾性力を記述したスクリプトを作成する
Asset を右クリックし、Create → C# Script で作成し、名前を「SpringControl」にしてください。以下のプログラムを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpringControl : MonoBehaviour
{
//振動中心を決めるオブジェクト
public GameObject centerObject;
Rigidbody rb;
Transform centerObjectTransform;
//単振動させる物体のRigidbodyと
//振動中心に設定したオブジェクトのTransformを取得しておく
void Awake()
{
rb = GetComponent<Rigidbody>();
centerObjectTransform = centerObject.transform;
}
//弾性力(復元力)を定義している関数
void AddSpringForce(Vector3 centerObject_position, float r)
{
var diff = centerObject_position - transform.position; //ばねの伸び=振動中心の位置(x0)-物体の位置(x)
var force = diff * r; //弾性力(復元力) = k*(x0-x)
rb.AddForce(force);//弾性力を加える
}
//0.02秒ごとに弾性力を更新していく
void FixedUpdate()
{
AddSpringForce(centerObjectTransform.position, 10f);
}
}
作成した「SpringControl」スクリプトを、Sphereにアタッチします。Sphereのコンポーネントにこのスクリプトが追加され、その中にあるCenter Object に Centerをアタッチします。
再生すると、物体が単振動する様子が確認できます。
ちょっと見栄えをよくしてみた
Main Camera内のClear FlagsをSolid Colorに変更します。
BackgroundのColorを少し暗めの色にしました。
Assetを右クリックして、Create→Material を作成。名前は「Sphere」としました。InspectorからAlbedoの右側に表示されている色を、見やすい色に変更します。
作成した「Sphere」マテリアルを、「Sphere」オブジェクトにアタッチします。
再生すると、先ほどよりも物体に注目しやすくなっています。
広告
現在、Unityを勉強し始めてから1ヶ月が経ちました。まだまだ未熟なことが多いですが、新しいことに挑戦できるワクワクでいっぱいです。プログラミング教育が必修化されつつある現場で、「実際にプログラミングを触ったことがある」というのは、強みになる信じて、勉強を続けていきたいです。
以下は、現在進行中で勉強している本です。
コメント