2016-07-09 12 views
1

Ich versuche, ein Spiel von mir selbst zu machen, und ich stieß auf eine Schwierigkeit.Beschleunigen Sie das Objekt in eine bestimmte Richtung

Ich habe dieses Objekt und ich brauche es in Richtung eines Vektors 3 Punkt zu beschleunigen.

Ich habe versucht, den Befehl Vector3.MoveTowards, aber das Objekt bewegt sich mit einer konstanten Geschwindigkeit und stoppt am Ziel.

Was ich tun muss, ist das Objekt beschleunigen von 0 Geschwindigkeit in Richtung eines Vektors 3 Punkt und nicht an dem Punkt zu stoppen, sondern in der gleichen Richtung, nachdem es durch den Punkt ging.

Weiß jemand, wie man das macht?

Vielen Dank!

Antwort

2

Führen Sie diese Schritte in einer Methode aus, die in der Methode Update oder FixedUpdate aufgerufen wird. FixedUpdate wird empfohlen, wenn Sie starre Körper verwenden.

Zuerst müssen Sie die Richtung von Ihrer Position zum Punkt finden und eine velocity Instanzvariable in Ihrem Skript definieren, wenn Sie keine starren Körper verwenden. Wenn Sie mit einem Rigidbody verwenden, verwenden Sie stattdessen rigidbody.velocity. target ist die Vector3 Position, auf die Sie beschleunigen möchten.

// Use rigidbody.velocity instead of velocity if using a Rigidbody 
private Vector3 velocity; // Only if you are NOT using a RigidBody 

Vector3 direction = (target - transform.position).normalized; 

Dann müssen Sie überprüfen, ob wir das Ziel bereits bestanden haben oder nicht. Diese Prüfung stellt sicher, dass die Geschwindigkeit die gleiche

// If our velocity and the direction point in different directions 
// we have already passed the target, return 
if(Vector3.Dot(velocity, direction) < 0) 
    return; 

bleibt Sobald wir dies getan haben, wir brauchen unsere Transform oder Rigidbody zu beschleunigen.

// If you do NOT use rigidbodies 
// Perform Euler integration 
velocity += (accelMagnitude * direction) * Time.deltaTime; 
transform.position += velocity * Time.deltaTime; 

// If you DO use rigidbodies 
// Simply add a force to the rigidbody 
// We scale the acceleration by the mass to cancel it out 
rigidbody.AddForce(rigidbody.mass * (accelMagnitude * direction)); 

Ich empfehle, dass Sie ein Rigidbody verwenden, da es viel mehr Sinn macht, wenn so etwas wie dies zu tun.

+0

Sorry, aber es ist an der Position haltend. Wohin sollte der dritte Teil des Skripts gehen? In der if-Anweisung im zweiten Teil Ihrer Antwort? –

+0

@AlbertoO. Es sollte * nach * der if-Anweisung sein. – EvilTak