2016-04-05 14 views
-1

Ich versuche eine App zu entwickeln, die Auto Beschleunigung, Bremsen und Kurvengeschwindigkeit erkennen kann. Ich muss die Gerätebeschleunigung erkennen. Ist diese Beschleunigung hoch oder niedrig? Wie Flo-App bei Google Play.Unity3D - Wie bekomme ich den höchsten Wert für die Beschleunigung von Input.gyro

Ich benutze Gyroskop und ich muss den höchsten Wert für die Benutzerbeschleunigung (x, y, z Achsen) von Gyroskop erhalten. Werte von x, y und z ändern sich bei jedem Bild. Ich muss den höchsten Wert dieser 3 Achsen für die spätere Verwendung erreichen.

Jetzt sieht meine aktuellen Code wie folgt

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class NewBehaviourScript : MonoBehaviour 
{ 
public Text x, y, z; 

void Start() 
{ 
    Input.gyro.enabled = true; 
} 

void Update() 
{ 
    x.text = Mathf.Abs(Input.gyro.userAcceleration.x).ToString(); 
    y.text = Mathf.Abs(Input.gyro.userAcceleration.y).ToString(); 
    z.text = Mathf.Abs(Input.gyro.userAcceleration.z).ToString(); 
} 
} 

Vielen Dank für jede Hilfe

+0

Ihre Frage ist verwirrend .... Sie möchten überprüfen, welche Achse größer als 3 von ihnen ist? Erklären Sie mehr darüber, was Sie zu tun versuchen ... – Programmer

+0

Nein. Ich möchte den höchsten Wert für jede Achse bekommen –

+0

bekomme den höchsten Wert von x, y, z ... das macht keinen Sinn. Wenn Sie wirklich Hilfe benötigen, ändern Sie Ihre Frage und fügen Sie hinzu, was Sie mit dem höchsten Wert meinen und was Sie archivieren möchten. – Programmer

Antwort

1

Verwenden Time.deltaTime; einen Timer dann speichern Input.gyro.userAcceleration in eine temporäre Vector3 Variable und vergleichen es später mit einem neuen tun Wert vom Gyro im nächsten Frame. Wenn der neue Wert > der alte Wert vector3 ist, überschreiben Sie den alten Wert. Wenn der Timer abgelaufen ist, können Sie die alten Werte als höchste Werte verwenden.

void Start() 
{ 
    Input.gyro.enabled = true; 
} 

bool firstRun = true; 
float counter = 0; 
float calcTime = 1; //Find highest gyro value every 1 seconds 
Vector3 oldGyroValue = Vector3.zero; 
Vector3 highestGyroValue = Vector3.zero; 

    void Update() 
    { 
     gyroFrame(); 
    } 

    void gyroFrame() 
    { 

     if (firstRun) 
     { 
      firstRun = false; //Set to false so that this if statement wont run again 
      oldGyroValue = Input.gyro.userAcceleration; 
      counter += Time.deltaTime; //Increment the timer to reach calcTime 
      return; //Exit if first run because there is no old value to compare with the new gyro value 
     } 

     //Check if we have not reached the calcTime seconds 
     if (counter <= calcTime) 
     { 
      Vector3 tempVector = Input.gyro.userAcceleration; 
      //Check if we have to Update X, Y, Z 
      if (tempVector.x > oldGyroValue.x) 
      { 
       oldGyroValue.x = tempVector.x; 
      } 

      if (tempVector.y > oldGyroValue.y) 
      { 
       oldGyroValue.y = tempVector.y; 
      } 

      if (tempVector.z > oldGyroValue.z) 
      { 
       oldGyroValue.z = tempVector.z; 
      } 
      counter += Time.deltaTime; 
     } 

     //We have reached the end of timer. Reset counter then get the highest value 
     else 
     { 
      counter = 0; 
      highestGyroValue = oldGyroValue; 
      Debug.Log("The Highest Values for X: " + highestGyroValue.x + " Y: " + highestGyroValue.y + 
       " Z: " + highestGyroValue.z); 
     } 
    }