Nexus Lab. Blog

UnityのRigidBodyで遊ぶ①バネの実装

Milo です。
今日はUnityでバネの動きを作って遊んで見ました!

この記事を書いたひと
硬めのバネで肉挟むとめちゃくちゃ痛いですよね。ゴムパッチンより痛いかも


参考にした動画

www.youtube.com

これを元に実装して見ました。
まずはコードです〜。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spring : MonoBehaviour {

	//物体をバネで引っ張るためのオブジェクト
	public GameObject targetSphire;
	
	Rigidbody rb;
	Transform targetSphireTransform;
	void Awake() {
		rb = GetComponent<Rigidbody>();
		targetSphireTransform = targetSphire.transform;
	}

	//バネの力を加える
	//目標いち、バネ係数rが引数
	void AddSpringForce(Vector3 target_position, float r) {
		var diff = target_position - transform.position; //目標位置と、自分の位置との差。要するにバネの伸び
		var force = diff * r; //バネの力、弾性力は、バネ係数*バネの伸び
		rb.AddForce(force);
	}

	//オーバーシュートしないバネの力を加える
	void AddSpringForceExtra(Vector3 target_position) {
		var r = rb.mass * rb.drag * rb.drag / 4f;	//オーバーシュートしないバネ係数
		var diff = target_position - transform.position;
		var force = diff * r;
		rb.AddForce(force);
	}

	void FixedUpdate (){
		//AddSpringForce(targetSphireTransform.position, 10f);
		AddSpringForceExtra(targetSphireTransform.position);
	}
	
}

GameObjectを2つ用意して、片方にこのスクリプトを取り付け、もう片方をtargetSphireとしてinspectorから設定してあげましょう
f:id:nexusyuumilo:20180127184552p:plain

以上です。

関連記事