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.
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? –
@AlbertoO. Es sollte * nach * der if-Anweisung sein. – EvilTak