Во что я попал?
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 9 из 71.
Объект Collision, который Unity передаёт в OnCollisionEnter, описывает другую сторону контакта. collision.gameObject — это объект, с которым вы столкнулись, поэтому collision.gameObject.name — его имя, а collision.gameObject.CompareTag("Hazard") проверяет его тег. (collision.collider — это конкретный коллайдер, которого вы коснулись, если у объекта их несколько.)
Эта машинка-бампер записывает всё, с чем сталкивается, и жалуется на опасности:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Bumped into " + collision.gameObject.name);
if (collision.gameObject.CompareTag("Hazard"))
{
Debug.Log("Ouch!");
}
}Первая строка, которую она записывает, — Bumped into Floor, сразу после начала игры: пол, на котором она стоит, — это тоже столкновение. Поэтому скрипт, реагирующий на столкновения, всегда сначала проверяет, с чем он столкнулся. Следите за тем, какой объект вы указываете: CompareTag("Hazard") сам по себе проверяет тег вашего собственного объекта, а Destroy(gameObject) уничтожает ваш собственный объект, тогда как Destroy(collision.gameObject) удаляет объект, с которым вы столкнулись.
Задание
ЛегкоПоручи снегоуборщику работу: очищать блоки с тегом Snow.
- Добавь в
Plowметодvoid OnCollisionEnter(Collision collision), который действует только при условииcollision.gameObject.CompareTag("Snow"). - Внутри вызови
Destroy(collision.gameObject);, увеличь полеclearedна 1 и выведи в лог"Cleared " + cleared.
Нажми «Играть» и врежься в снег: каждый блок исчезнет, а Console будет вести подсчёт. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class Plow : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
private int cleared;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
}
// Снег, с которым сталкивается снегоуборщик: уничтожить его, учесть и записать количество в журнал
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity