Menu
CoddyTech

Оси

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 20 из 85.

Input.GetAxis("Horizontal") превращает стрелки влево и вправо (а также A и D) в одно число от -1 до 1: -1 — влево, 1 — вправо, 0 — ни в одну сторону. Input.GetAxis("Vertical") делает то же самое со стрелками вниз и вверх (S и W). Один вызов заменяет два if, а стик геймпада управляет теми же осями без дополнительного кода.

Число не меняется скачком. При настройках Unity по умолчанию оно движется к целевому значению со скоростью 3 в секунду, поэтому после нажатия требуется треть секунды, чтобы достичь 1, и ещё треть секунды, чтобы вернуться к 0 после отпускания клавиши. Благодаря такому плавному изменению скорости этот ховеркрафт мягко разгоняется и плавно останавливается:

public float speed = 5f;

void Update()
{
    float h = Input.GetAxis("Horizontal");
    transform.position += new Vector3(h * speed * Time.deltaTime, 0, 0);
}

Input.GetAxisRaw("Horizontal") пропускает сглаживание: каждый кадр возвращается ровно -1, 0 или 1, поэтому движение начинается и прекращается сразу. Используй GetAxis для того, что должно ощущаться тяжёлым, а GetAxisRaw — для чёткого управления. Если удерживать обе стрелки, обе функции вернут 0, потому что направления взаимно компенсируются. (В проекте Unity 6 настройка Active Input Handling из урока «Управление с помощью клавиш» также применяется к осям.)

challenge icon

Задание

Легко

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

  1. В Update() считай значения float h = Input.GetAxisRaw("Horizontal"); и float v = Input.GetAxisRaw("Vertical");.
  2. Прибавь new Vector3(h * speed * Time.deltaTime, 0, v * speed * Time.deltaTime) к transform.position.

Нажми «Играть», щёлкни по игровому окну и управляй с помощью стрелок или WASD: ровер сразу начинает и прекращает движение. Затем нажми «Проверить».

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

using UnityEngine;

public class Rover : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        // Horizontal управляет движением по оси x, Vertical — по оси z, без сглаживания.
    }
}

Все уроки раздела Основы скриптинга в Unity

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