Катящийся шар
Часть раздела Физика и игровой процесс путешествия по 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 во время игры.
Задание
СреднеНачни игру Coin Rush: катай мяч с помощью стрелок.
- В
Start()файлаBall.csзадайrb = GetComponent<Rigidbody>();. - В
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.
}
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity