外部センサの入力間隔を速度に変更

※現在はこの方法は使用していません.Arduino内で1周にかかるmsを検出し,シリアル通信でその数値をUnityに送信しています(現在の方法はこちら

自転車の速度計のように,円周nのタイヤが1周するのに何秒かかったかで,時速を計測するスクリプトです.

余談ですが,これはゲーム内の速度ではなく,実際に外部のデバイスの速度を計算するスクリプトです.

なお,Unity内の速度は1ユニット1mで計算することが多いです.

 

using UnityEngine;
using System;//時間計測するのに必要

public class mySpline : MonoBehaviour
{

	//時間計測に必要な変数
	private int starttime; //最初の初期値用
	private int now; //現在の時間を格納する用
	private int duration; //経過時間を格納する用

	void Start(){

		starttime = DateTime.Now.Hour * 60 *60 * 1000 + DateTime.Now.Minute * 60 * 1000 + DateTime.Now.Second * 1000 + DateTime.Now.Millisecond;
		//ゲームスタート時の時刻をミリセカンドに変換してstarttimeに格納します
	}


	public void cycle1(){ //1周ごとにセンサーなどでこの関数を呼びます.publicにしてあるのは,テスト用にGUIボタンで呼べるようにしてる
		now = DateTime.Now.Hour * 60 *60 * 1000 + DateTime.Now.Minute * 60 * 1000 + DateTime.Now.Second * 1000 + DateTime.Now.Millisecond; //この関数が呼ばれた時の時間をミリセカンドにして格納
		duration = now - starttime; //経過時間を算出してdurationに格納
		float myspeed = (3600000f / duration) * 0.00062f; //円周0.00062km(つまり62cm)と経過時間で時速を計算し,ローカル変数myspeedに格納する
		string kmspeed = myspeed.ToString ("N2"); //myspeedを文字列に変換し,ただし小数点2桁までで切り捨てて,文字用ローカル変数kmspeedに格納.文字列に変更しているのはGUIにすぐいれられるようにするため
			Debug.Log (kmspeed + "km/h");//コンソール画面に速度と単位Km/hを追加して表示
		starttime = DateTime.Now.Hour * 60 *60 * 1000 + DateTime.Now.Minute * 60 * 1000 + DateTime.Now.Second * 1000 + DateTime.Now.Millisecond;//次の計測開始用にstarttimeの時間を現在時間に更新

	}

}

speedscreen

ところで,Unityの計算間隔を超えた場合ってどうなるんでしょう?