2017-01-04 5 views
1

Ich habe ein Zeichen, das alle zwei Sekunden seine Ausrichtung ändert (rechts oder links). Nach dass zwei Sekunden wird die Geschwindigkeit mit -1 multipliziert, so ändert er seine Richtung, aber es geht einfach immer rechts (->)Charakter ändert nicht die Richtung

Hier ist mein Code:

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

public class EnemyController : MonoBehaviour { 

public int speed = 2; 

void Start() 
{ 

    StartCoroutine(Animate()); 
} 

void Update() 
{ 
    float auto = Time.deltaTime * speed; 
    transform.Translate (auto, 0, 0); 
} 

IEnumerator Animate() 
{ 
    while (true) { 
     yield return new WaitForSeconds (2); 
     transform.rotation = Quaternion.LookRotation (Vector3.back); 
     speed *= -1; 
     yield return new WaitForSeconds (2); 
     transform.rotation = Quaternion.LookRotation (Vector3.forward); 
     speed *= -1; 
    } 
} 
} 

Antwort

2

Das ist, weil transform.Translate das Objekt übersetzt in seinem lokalen Raum, nicht im Weltall.

Wenn Sie wie folgt vor:

// The object will look at the opposite direction after this line 
transform.rotation = Quaternion.LookRotation (Vector3.back); 
speed *= -1; 

Sie Flip Ihr ​​Objekt und Sie bitten, in die entgegengesetzte Richtung zu gehen. Somit wird das Objekt anschließend in die ursprüngliche Richtung verschoben.

Um Ihr Problem zu beheben, rate ich Ihnen, den Wert der speed Variable nicht zu ändern.

Versuchen Sie, sich in der gleichen Situation vorzustellen:

  1. Schritt vorwärts
  2. Um 180 ° drehen und zu Fuß nach hinten

Am Ende Sie in die gleiche Richtung deinen Weg "weiter" Hier

ist die letzte Methode:

IEnumerator Animate() 
{ 
    WaitForSeconds delay = new WaitForSeconds(2) ; 
    Quaterion backRotation = Quaternion.LookRotation (Vector3.back) ; 
    Quaterion forwardRotation = Quaternion.LookRotation (Vector3.forward) ; 
    while (true) 
    { 
     yield return delay; 
     transform.rotation = backRotation; 
     yield return delay; 
     transform.rotation = forwardRotation; 
    } 
} 
+0

Genie! Danke, das nervte mich wirklich, konnte es nicht herausfinden. – Maakep

+0

Entschuldigung, aber könnten Sie bitte die vollständige Methode schreiben? : | – Ardi

+0

entfernen Sie einfach beide 'Geschwindigkeit * = -1;' aus dem Animate() – Maakep

Verwandte Themen