Menu
CoddyTech

Во что я попал?

Часть раздела Физика и игровой процесс путешествия по 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) удаляет объект, с которым вы столкнулись.

challenge icon

Задание

Легко

Управляй снегоочистителем с помощью стрелок (они уже написаны) и найди ему работу. Два белых блока помечены тегом 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);
    }

    // Снег, на который наезжает снегоочиститель: удалите его, подсчитайте и выведите количество в журнал
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Физика и игровой процесс