Что такое «Сообщения» в классе MonoBehaviour Unity? (Start, Update, Awake ... и т.д.) - PullRequest
0 голосов
/ 13 октября 2019

Что такое "Сообщения" этой страницы? (Запуск, обновление, пробуждение и т. Д.)
Является ли это чем-то вроде виртуального метода или события?
Или "Сообщения" - это один из синтаксиса C #?
https://docs.unity3d.com/ScriptReference/MonoBehaviour.html

Ответы [ 2 ]

4 голосов
/ 13 октября 2019

Движок Unity в основном вызывает эти методы для MonoBehaviours, если они определены, в зависимости от событий Engine.

Например:

  • Awake вызывается, когда экземпляр сценарияпри загрузке.
  • Start вызывается в первом кадре при включении скрипта, перед каждым методом обновления и после вызова Awake
  • Update в каждом кадре

Существует множество сообщений, которые вы можете видеть в DOC, и они вызываются в зависимости от событий движка.

Вы не можете вызывать эти события, они обрабатываются двигателем!

Большинство общих типов:

  • Обновление
  • Пуск
  • Пробуждение
  • OnDestroy
  • OnEnable

Но обратите внимание, что использование этих методов (сообщений), пока они пусты, имеют небольшиенакладные расходы, потому что их вызовет движок, даже если они пусты.

Еще одна сложность заключается в том, что некоторые из этих сообщений могут быть сопрограммами. И вы можете дать им некоторые дополнительные функции.

IEnumerator Start()
{
    Debug.Log("First frame i'm being enabled! yeee");
    // After 2 seconds i'm gonna blink
    yield return new WaitForSeconds(2.0f);
    Debug.Log("I'm going to blink");
    Blink();
}
1 голос
/ 13 октября 2019

«Сообщение» здесь является синонимом функции / метода, которые просто автоматически называются функциями с помощью движка Unity для любого сценария, унаследованного от MonoBehaviour и присоединенного к игровому объекту ACTIVE в вашей сцене.

Рассмотримскрипт животного

public class Animal : MonoBehaviour
{
    void Awake()
    {
        Debug.Log("Code here in awake is executed by unity the first time this object is activated, and never again in the lifetime of this object.");
    }

    void Start()
    {
        Debug.Log("Start is similar to awake but is executed after 'Awake' is executed on all game objects.");
    }

    void OnEnable()
    {
        Debug.Log("Code executed EVERYTIME your object is activated, including the first time you enter playmode, provided this object is active.");
    }

    void OnDisable()
    {
        Debug.Log("Code executed EVERYTIME your object is deactivated, does not include the first time you enter playmode if the object was disabled before playing.");
    }

}

И так далее, каждое сообщение / функция / метод имеет свой вариант использования и время, вы освоите его, когда начнете их использовать, они являются ядром движка.

...