Во что я попал?
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 9 из 63.
Объект 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.
- Когда снегоочиститель врежется в объект с тегом
Snow, уничтожь этот блок, прибавь 1 к счётчику и выведи сообщение:Cleared 1,Cleared 2. - Всё остальное, чего касается снегоочиститель, включая землю и стену, должно оставаться на месте.
Нажми Играть и расчисти дорогу, затем нажми Проверить.
Попробуйте сами
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 для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора