Плавная смена полосы
Урок 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 секунды: быстро, но движение заметно.
Задание
Легко- Добавь
public float laneSpeed = 16f;подlaneWidth. - Замени
float x = targetX;строкой сMathf.MoveTowards, приведённой выше. - Нажми «Играть» и меняй полосы.
Попробуйте сами
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