Зоны смерти
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 19 из 71.
Зона гибели — это триггер, расположенный над местом, куда игрок не должен попасть: лавой, шипами или пустотой под уровнем. При попадании в неё игрок возвращается в точку появления. Здесь за это отвечает собственный скрипт лавы, а точка появления задаётся в поле 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 единиц в секунду, окажется в точке появления всё ещё падая со скоростью 10, а тот, кто вбежал в лаву, продолжит бежать и снова попадёт в неё. Присваивание linearVelocity значения Vector3.zero приводит к тому, что игрок появляется неподвижно. Проверка тега оставляет всё остальное, что упадёт в лаву, на месте.
Задание
ЛегкоДобавь игроку возрождение. Этот скрипт находится на игроке, поэтому он перемещает transform и body, а не other.
- В
Start()присвой полюVector3 respawnзначениеtransform.position. - В
OnTriggerEnter(Collider other), когдаother.CompareTag("Checkpoint"), присвойrespawn = transform.position;. - Когда
other.CompareTag("KillZone"), присвойtransform.position = respawn;иbody.linearVelocity = Vector3.zero;.
Нажми «Играть» и сойди с моста. Затем нажми «Проверить».
Попробуйте сами
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 для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity