Menu
CoddyTech

Ein fließender Spurwechsel

Lektion 2 von 20 im Kurs Unity-Spiel: Himmelsbahnen von Coddy.

Der Läufer springt innerhalb eines einzigen Frames von einer Spur zur anderen. Es funktioniert, aber es sieht aus, als würde er sich teleportieren. Ein Spurwechsel sollte einen Moment dauern, damit das Auge ihm folgen kann.

Mathf.MoveTowards(current, target, maxStep) bewegt eine Zahl auf ein Ziel zu, und zwar höchstens um maxStep und niemals darüber hinaus. Wird die Funktion in jedem Frame mit einem Schritt aus Geschwindigkeit mal Time.deltaTime aufgerufen, bewegt sich die Zahl unabhängig von der Bildrate mit dieser Geschwindigkeit in Einheiten pro Sekunde:

float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);

Bei einem Wert von 16 für laneSpeed dauert ein Spurwechsel über 2.5 Einheiten etwa 0.16 Sekunden: schnell, aber sichtbar.

challenge icon

Aufgabe

Einfach
  1. Füge public float laneSpeed = 16f; unter laneWidth hinzu.
  2. Ersetze float x = targetX; durch die oben stehende Mathf.MoveTowards-Zeile.
  3. Drücke „Spielen“ und wechsle die Spur.

Probier es selbst

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;

    public int lane;

    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);

        float targetX = lane * laneWidth;
        float x = targetX;
        Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
        controller.Move(move);
    }
}

Alle Lektionen in Unity-Spiel: Himmelsbahnen

Übe selbstständig: Unity-Playground