Почему Start запускается дважды в этой настройке - PullRequest
0 голосов
/ 09 апреля 2020

Я создал совершенно новый проект со следующими скриптами, прикрепленными к пустому GameObject:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Parent : MonoBehaviour
{
    void Start()
    {
        print(">>>>>>>>>>>>> S T A R T <<<<<<<<<<<<<");
    }
}

и:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Child : Parent
{

}

Вот результат:

[07.07.55] >>>>>>>>>>>>> S T A R T <<<<<<<<<<<<<
UnityEngine.MonoBehaviour:print(Object)
[07.07.55] >>>>>>>>>>>>> S T A R T <<<<<<<<<<<<<
UnityEngine.MonoBehaviour:print(Object)

Почему Start запускается дважды в этой настройке?

1 Ответ

1 голос
/ 09 апреля 2020

Поскольку данная ситуация очень проста, я думаю, что есть некоторые возможности.

  1. На самом деле есть два игровых объекта, привязанных к данному сценарию.

  2. Вы подключили каждый компонент Parent и Child по отдельности.

... оба не очень рекомендуются для использования единства.

При проектировании MonoBehaviour наследующий класс, который может быть унаследован другим классом, часто объявляется функция события Unity с ключевым словом virtual, например:

public class Parent : MonoBehaviour
{
    protected virtual void Start()
    {
        Debug.Log(">>>>>>>>>>>>> S T A R T <<<<<<<<<<<<<");
    }
}

public class Child : Parent
{
    protected override void Start()
    {
        base.Start();
        Debug.Log("This is Child!");
    }
}

А с привязкой игрового объекта к Child консоль будет write

>>>>>>>>>>>>> S T A R T <<<<<<<<<<<<<
This is Child!

Но с компонентом Parent будет записано только

>>>>>>>>>>>>> S T A R T <<<<<<<<<<<<<
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...