ばねの動きをシュミレーションする①[Unity][高校物理]

この記事は約4分で読めます。

ばねがつながった物体の運動(単振動)

フックの法則

ばねは変形すると元に戻ろうとする性質があるため、ばねを伸ばせば伸ばすほど元に戻ろうとする力(弾性力)は大きくなります。
フックの法則とは、ばねから受ける力の大きさは伸びに比例するという法則です。このときの比例定数をばね定数といいます。

復元力とは

物体が振動の中心からずれたときに、振動の中心に戻そうとする力のことです。振動中心からのズレ(変位)に復元力は比例します。

復元力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ヶ月が経ちました。まだまだ未熟なことが多いですが、新しいことに挑戦できるワクワクでいっぱいです。プログラミング教育が必修化されつつある現場で、「実際にプログラミングを触ったことがある」というのは、強みになる信じて、勉強を続けていきたいです。

以下は、現在進行中で勉強している本です。

コメント

タイトルとURLをコピーしました