Menu
CoddyTech

Плавная смена полосы

Урок 2 из 20 курса Игра на Unity: Небесные трассы на Coddy.

Бегун перепрыгивает с полосы на полосу за один кадр. Это работает, но выглядит так, будто он телепортируется. Смена полосы должна занимать некоторое время, чтобы глаз успевал за ней следить.

Mathf.MoveTowards(current, target, maxStep) приближает число к целевому значению не более чем на maxStep и никогда его не превышает. Если вызывать её каждый кадр, задавая шаг как скорость, умноженную на Time.deltaTime, число будет перемещаться с этой скоростью в единицах в секунду независимо от частоты кадров:

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

При значении laneSpeed, равном 16, смена полосы на расстояние 2.5 единицы занимает около 0.16 секунды: быстро, но движение заметно.

challenge icon

Задание

Легко
  1. Добавь public float laneSpeed = 16f; под laneWidth.
  2. Замени float x = targetX; строкой с Mathf.MoveTowards, приведённой выше.
  3. Нажми «Играть» и меняй полосы.

Попробуйте сами

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);
    }
}

Все уроки раздела Игра на Unity: Небесные трассы

Потренируйтесь самостоятельно: Песочница Unity