Menu
CoddyTech

Катящийся шар

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 28 из 71.

В этой главе мы создадим небольшую игру Coin Rush. Ты будешь катать шар по арене, окружённой стенами, с помощью стрелок и собирать монеты, пока не истечёт время. Как и в проекте Unity, работу разделят два скрипта: Ball будет перемещать шар, вести счёт и отсчитывать время, а Coin будет находиться на каждой монете. Сначала Coin.cs — это пустой класс, который мы заполним на следующем уроке.

Шар катится, когда ты толкаешь его, а не перемещаешь напрямую. Приложи силу к его Rigidbody с помощью AddForce и не ограничивай его вращение: сила перемещает шар, а трение о пол удерживает его нижнюю часть и раскручивает шар. Этот шар для боулинга катится по дорожке, пока удерживается клавиша Space:

public float push = 6f;
private Rigidbody rb;

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

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(Vector3.forward * push);
    }
}

Шар, который катится без проскальзывания, вращается со скоростью, равной его скорости движения, делённой на радиус. Поэтому шар радиусом 0.5, движущийся со скоростью 3 единицы в секунду, вращается со скоростью 6 радиан в секунду (rb.angularVelocity). Если вместо этого изменить его transform.position или заморозить вращение в разделе Constraints компонента Rigidbody, шар будет скользить, как шайба, не вращаясь. Обычная одноцветная сфера выглядит одинаково в обоих случаях. Чтобы увидеть вращение, следи за параметром Angular Velocity в разделе Info компонента Rigidbody во время игры.

challenge icon

Задание

Средне

Начни игру Coin Rush: катай мяч с помощью стрелок.

  1. В Start() файла Ball.cs задай rb = GetComponent<Rigidbody>();.
  2. В FixedUpdate() считай float x = Input.GetAxis("Horizontal"); и float z = Input.GetAxis("Vertical");, затем вызови rb.AddForce(new Vector3(x, 0f, z) * force);.

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

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

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;

    void Start()
    {
    }

    void FixedUpdate()
    {
        // Перемещайте шар стрелками: Horizontal — по оси x, Vertical — по оси z.
    }
}

Все уроки раздела Физика и игровой процесс

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