Menu
CoddyTech

Invoke

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 22 из 71.

Invoke("Explode", 3f) вызывает собственный метод скрипта Explode один раз через 3 секунды, а выполнение следующего за ним кода продолжается сразу. Unity находит метод по его имени, переданному в виде строки, и метод не принимает параметров. Эта бомба взрывается через 3 секунды после начала игры:

void Start()
{
    Invoke("Explode", 3f);
}

void Explode()
{
    Debug.Log("Boom");
    Destroy(gameObject);
}

Поскольку имя — это строка, компилятор не может его проверить. Invoke("Explod", 3f) компилируется, а через 3 секунды Unity выводит сообщение Trying to Invoke method: Bomb.Explod couldn't be called. вместо взрыва. В C# эту проблему решает nameof: nameof(Explode) — это строка "Explode", созданная компилятором на основе проверенного им имени, поэтому опечатка в ней приводит к ошибке компиляции, которую вы увидите до запуска игры. Напишите Invoke(nameof(Explode), 3f);.

challenge icon

Задание

Легко

Сделай так, чтобы платформа рассыпалась через мгновение после приземления игрока на неё.

  1. В OnCollisionEnter, когда collision.gameObject.CompareTag("Player"), вызови Invoke(nameof(Fall), delay);.
  2. Добавь void Fall(): установи body.isKinematic = false; и выведи в журнал Crumble!.

Нажми «Играть» и пройдись по платформе: через секунду она упадёт. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

public class Crumble : MonoBehaviour
{
    public float delay = 1f;
    Rigidbody body;

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void OnCollisionEnter(Collision collision)
    {
        // Когда игрок приземлится: сделайте так, чтобы платформа упала через delay секунд
    }

    // Fall(): включите физику платформы и выведите Crumble! в лог
}

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

Потренируйтесь самостоятельно: Песочница Unity