Катящийся мяч
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 27 из 63.
В этой главе вы создадите небольшую игру 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 во время игры.
Задание
СреднеНачни Coin Rush с мяча. В Inspector задай Ball значение force, равное 10.
- В
Start()сохраниRigidbodyмяча вrb. - В
FixedUpdate()толкай мяч стрелками:Input.GetAxis("Horizontal")вдоль x иInput.GetAxis("Vertical")вдоль z, в обоих случаях умножая наforce. - Не ограничивай вращение мяча, чтобы он катился.
Пока оставь Coin.cs без изменений. Нажми Play, щёлкни по игре и покатайся по арене, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class Ball : MonoBehaviour
{
public float force = 10f;
private Rigidbody rb;
void Start()
{
}
void FixedUpdate()
{
// Двигайте шар стрелками: Horizontal — по оси x, Vertical — по оси z.
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора