2016-03-31 10 views
0

Ich habe ein Spiel mit Google Cardboard. Ich sitze im Cockpit und kann mich ohne Probleme umsehen.Tilt GameObject von Seite zu Seite

Jetzt möchte ich mein Cockpit von Seite zu Seite neigen, um ein realistischeres Gefühl zu geben, anstatt nur stationär zu sein.

Bisher habe ich dies:

using UnityEngine; 
using System.Collections; 

public class Tilt : MonoBehaviour 
{ 
    float speed = 0.25f; 

    void Update() 
    { 
     Tilter(); 
    } 

    void Tilter() 
    { 
     if (transform.rotation.z < 5f) { 
      transform.Rotate (new Vector3 (0f, 0f, speed)); 
     } 

     if (transform.rotation.z > 5f) 
      transform.Rotate (new Vector3 (0f, 0f, -speed)); 
    } 

} 

Das beginnt das Cockpit zu der wie erwartet links kippen, aber sobald die Rotation größer ist als der Wert von 5 wird, wird das Cockpit nicht in die andere Richtung drehen, es dreht sich auf die gleiche Weise, anstatt in die entgegengesetzte Richtung.

+0

Ein logisches Problem, das Sie in Ihrem Code haben, ist, dass selbst wenn es fehlerfrei funktioniert, Ihre Rotation bei z = 5 gesperrt wird. In dem Moment, in dem es 5 überholt, wird es auf 5 zurückgehen ... und wenn es etwas darunter ist, wird es wieder auf und über 5 gehen. Dieses wird um 5 ad infinitum oszillieren, im Grunde eine Schwingung (abhängig von der Geschwindigkeit)). Ist das deine Absicht? – Serlite

+0

@Tom das war eine gute Frage. Warum hast du es gelöscht? Ist das Problem gelöst? – Programmer

+0

@Programmer Ich tippte das für etwa 15 Minuten, bevor ich merkte, dass ich das falsche Ding im Inspektor zugewiesen hatte -.- Nur ein dummer Fehler! Du meinst, ich hätte es verlassen und einfach meine peinliche Antwort reinlegen sollen? : ') – Tom

Antwort

2

Ich habe diesen Code nicht ausprobiert, aber wenn ich verstehe, was Sie versuchen, würde ich vorschlagen, Mathf.Sin und Time.time zu verwenden, um kontinuierlich Werte im Bereich von -1 bis 1 zu erhalten und dann zu multiplizieren der Drehbereich Ihres Cockpits. Zum Beispiel:

using UnityEngine; 
using System.Collections; 

public class Tilt : MonoBehaviour 
{ 
    float speed = 1.0f; 
    float rotationAngle = 45; 

    void Update() 
    { 
     Tilter(); 
    } 

    void Tilter() 
    { 
     float rotationZ = rotationAngle * Mathf.Sin(Time.time * speed); 
     transform.Rotate (new Vector3 (0f, 0f, rotationZ)); 
    } 

} 

Dieses Beispiel sollte Ihr Cockpit 0-45 langsam drehen, dann wieder auf 0, dann auf -45, dann zurück auf 0, ein so weiter (wieder habe ich es nicht ausprobiert).

Sie können den Wert der Geschwindigkeit erhöhen oder verringern, um die Drehung schneller oder langsamer zu machen.