Menu
CoddyTech

Платформа

Урок 1 из 19 курса Игра в Unity: арканоид на Coddy.

В этом курсе ты создашь 3D-версию игры «Арканоид»; на уроке ты добавишь ракетку, отскакивающий мяч, стену из кирпичей, жизни, уровни и бонусы. Всё движется в плоскости x и y при z 0. Скрипты Paddle, Ball, Brick, GameManager и PowerUp пока являются заглушками. Кнопка «Играть» запускает игру, а кнопка «Проверить» проверяет решение.

У ракетки есть кинематический Rigidbody, который перемещается с помощью rb.MovePosition в FixedUpdate(), поэтому физика учитывает её движение. Кинематическое тело проходит сквозь стены, поэтому скрипт удерживает его внутри. Если ограничить координату центра границей стены, половина ракетки окажется внутри неё: предел равен координате стены минус половина ширины. Если стены расположены на -6 и 6, а ширина ракетки равна 2:

float half = 2f / 2f;
target.x = Mathf.Clamp(target.x, -6f + half, 6f - half);
rb.MovePosition(target);

Центр остаётся между -5 и 5, поэтому края останавливаются точно у стен. Считывание ширины из transform.localScale.x на каждом шаге позволяет сохранять правильные пределы, даже если ракетка увеличится.

challenge icon

Задание

Легко

Перемещай платформу между стенами.

  1. В Paddle's FixedUpdate() задай float input: -1, если нажата клавиша со стрелкой влево или A, 1 для стрелки вправо или D, иначе 0.
  2. Вычисли Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
  3. С помощью float half = transform.localScale.x / 2f; ограничь target.x значениями от -wallX + half до wallX - half, затем выполни rb.MovePosition(target);

Нажми «Играть» и доведи платформу до обеих стен: у каждой она остановится. Затем нажми «Проверить».

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

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // Внутренние поверхности боковых стен находятся в точках -wallX и wallX

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Двигайся с помощью клавиш со стрелками или A и D и оставайся между стенами.
    }
}

Все уроки раздела Игра в Unity: арканоид

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