Зоны гибели
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 18 из 63.
Зона поражения — это триггер над областью, куда игрок не должен попадать: лавой, шипами или пустым пространством под уровнем. При входе в неё игрок возвращается в точку появления. Здесь это делает собственный скрипт лавы, а точка появления задаётся в поле Transform в Inspector:
public Transform spawnPoint;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
other.transform.position = spawnPoint.position;
other.attachedRigidbody.linearVelocity = Vector3.zero;
}
}other.attachedRigidbody — это Rigidbody, которому принадлежит вошедший коллайдер. Установка transform.position телепортирует игрока — именно это и нужно для возрождения. Однако Rigidbody сохраняет скорость после прыжка: игрок, упавший со скоростью 10 единиц в секунду, появится в точке появления и продолжит падать с той же скоростью, а тот, кто вбежал в лаву, продолжит бежать и сразу снова попадёт в неё. Установка linearVelocity в значение Vector3.zero позволяет появиться на месте. Проверка тега оставляет всё остальное, что упадёт в лаву, на месте.
Задание
ЛегкоИгрок пересекает узкий мост над пустотой, его толкают силы, приложенные клавишами со стрелками; эта часть уже написана. Триггер с тегом KillZone заполняет пространство внизу, а флаг с тегом Checkpoint, тоже являющийся триггером, стоит посередине моста. Добавь в скрипт игрока точки возрождения:
- Когда игра начинается, точка возрождения находится там, где стоит игрок.
- Прикосновение к
Checkpointделает позицию игрока в этот момент новой точкой возрождения. - При входе в
KillZoneигрок возвращается в точку возрождения и останавливается.
Нажми Play и сойди с моста, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class Player : MonoBehaviour
{
public float force = 12f;
Rigidbody body;
Vector3 input;
// respawn: место, где игрок появляется снова
void Start()
{
body = GetComponent<Rigidbody>();
}
void Update()
{
input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
}
void FixedUpdate()
{
body.AddForce(input * force);
}
// Checkpoint: запомнить местоположение игрока. KillZone: вернуть его туда и остановить.
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора