※現在はこの方法は使用していません.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の時間を現在時間に更新 } }
ところで,Unityの計算間隔を超えた場合ってどうなるんでしょう?