Ich mache ein Bewegungsskript mit Vektor 2 und Rigidbody.velocity. Ich möchte, dass sich mein Spielobjekt bis zu einer bestimmten x-Position bewegt und dann zur ursprünglichen Position zurückkehrt, während ich mich kontinuierlich fortbewege. Ich erreichte den ersten Teil, es geht nach hinten, wenn es einen bestimmten Punkt erreicht, aber dann die Rückwärtsbewegung hört nie auf:Einheit C# Vektor 2 Bewegungsprobleme
edit:
public float spawnPos;
public float currentPos;
public float constantSpeed = 3;
public float speed = 0;
KeyInput scriptBeholderKI;
Rigidbody2D squadRigidBody;
//Comprovation of spawnposition and KeyInput
//Script adquisition
void Start() {
spawnPos = transform.position.x;
scriptBeholderKI = gameObject.GetComponent <KeyInput>();
squadRigidBody = gameObject.GetComponent <Rigidbody2D>();
}
void FixedUpdate() {
//Movement
squadRigidBody.velocity = new Vector2 (constantSpeed + speed , 0);
//key inputs
if (Input.GetKeyDown (scriptBeholderKI.forward)) {
StopAllCoroutines();
StartCoroutine (RightMovement(0f));
}
if (Input.GetKeyDown (scriptBeholderKI.backwards)) {
StopAllCoroutines();
StartCoroutine (LeftMovement (0f));
}
}
//Speed values (Right, Left)
IEnumerator RightMovement (float Rloop) {
while (transform.position.x < constantSpeed * Time.time + spawnPos + 14) {
speed = 10f;
yield return new WaitForSeconds (Rloop);
}
if (transform.position.x> constantSpeed * Time.time + spawnPos + 14) {
StopAllCoroutines();
StartCoroutine (LeftMovement (0f));
}
}
IEnumerator LeftMovement (float Lloop) {
while (transform.position.x > constantSpeed * Time.time + spawnPos) {
speed = -7f;
yield return new WaitForSeconds (Lloop);
}
}
Wenn Sie auch etwas sehen, die pls verbessert werden könnte mir c machen beachten :
Wenn ich die Vorwärtseingabe drücke, bewegt sich mein Spielobjekt, bis es einen Punkt erreicht, wenn ich die bacwards eindrücke, bewegt es sich nonstop nach links.
ist auch die Sache, dass ich möchte, dass sich mein Ziel mit der konstanten Geschwindigkeit des Spielobjekts bewegt, deshalb verwende ich Time.time. die Bewegungen, die ich mit den Eingängen mache, sind genauer gesagt die Beschleunigungen. Ich möchte, dass mein Ziel immer in der gleichen relativen Entfernung vom Spielobjekt ist, da das Spiel beginnt. Zumindest die maximale Reichweite nach rechts ist die, die ich will ...
Und ich habe auch versucht, den Stop alle Coroutinen Block und nichts zu entfernen, ich aber meine Absicht war es, in der Lage sein, die Bewegung abzubrechen, wann immer ich will (Ich entfernte das in der RightMovement-Coroutine, aber es war nicht notwendig)
eine letzte Sache: Ich habe "FixedUpdate" für "Update" geändert, weil es mir Probleme mit meinen Eingaben gab, tue ich nicht wissen, ob es relevant ist, aber nur für den Fall.
id sagen das tut nicht, was du denkst, es tut 'transform.position.x "(Time.time is) Die Zeit zu Beginn dieses Frames (Read Only). Dies ist die Zeit in Sekunden ** seit Beginn des Spiels **." Stattdessen, wenn Sie anfangen zu bewegen, berechnen Sie Ihr Ziel, speichern Sie es und überprüfen Sie gegen diese Position, wenn Sie sich umdrehen, das gleiche tun. –
yes
Ich kann schon alles sehen, was sich ändern sollte.Können Sie Ihre Frage bearbeiten und hinzufügen, was passiert, wenn die Vorwärts-Taste gedrückt wird und was passiert, wenn die Rückwärts-Taste gedrückt wird. – Programmer
Warum erstellen Sie nicht einfach eine "Movement" -Funktion und geben "float" oder "-float" ein, je nachdem, auf welche Art Sie sich bewegen möchten? Wie es aussieht, ist die Strecke, die du reisen willst, fix ... (oder ein bool, zum Beispiel wenn (doMoveLeft) mvSpeed * = -1; [Bewegungscode])? Haben Sie auch versucht, den in Ihrem "while" -Ausdruck ausgewerteten Wert zu debuggen? Was lässt Dich denken, dass LeftMov ... aufhört, wenn es den Block "StopAllCorutines" nicht gibt? –