Продолжайте запускать функцию обновления, даже если игровой объект неактивен - PullRequest
0 голосов
/ 30 апреля 2019

Hi2,

Кто-нибудь знает, как поддерживать выполнение сценария в инактивированном единственном игровом объекте?

У меня есть определенная функция в Обновление , которое я хочу сохранить, даже если сам игровой объект неактивен.

Ответы [ 3 ]

2 голосов
/ 30 апреля 2019

Я бы порекомендовал вам пересмотреть свой дизайн.

Деактивация всего объекта специально предназначена для удаления объекта из мира, не удаляя его.Он больше не должен участвовать в любой форме сцены (в качестве примечания вы заметите, что GameObject.Find также больше не найдет ваш деактивированный объект).

У вас есть несколько вариантов, начиная свыделение фрагмента кода, необходимого для продолжения работы, пока объект деактивирован:

Решение 1. Как упоминалось в mowie2, деактивируйте определенные компоненты.Поместите свой кусочек кода в другой скрипт и деактивируйте все остальные компоненты , кроме , который будет продолжать работать.Это немного сложно, так как вам придется перебирать все ваши компоненты, активируя / деактивируя их.Примечание: некоторые компоненты не могут быть деактивированы, например Rigidbody.

Решение 2: создайте иерархию:

MyObject (with component A, that must keep running)
 |-> Child (with component X, Y, Z)

В этом случае вы деактивируете объект Child (дочерний элемент будет иметь всерегулярные компоненты, такие как Renderers, Colliders и т. д.).MyObject будет содержать тот бит кода, который должен продолжаться.

Решение 3: вызовите обновление вручную (как упомянуто Zambari) из другого активного сценария:

В сценарии, который будет деактивирован, добавьтеpublic перед обновлением:

public class MyScript : Monobehaviour {
    public void Update() {
       // Your code here
    }
}

В другом сценарии, который прикреплен к активному объекту:

public class AnotherScript : Monobehaviour {
   public MyScript OtherScript;

   void Update() {
      // Manually call update from this script, which is active
      OtherScript.Update();  
   }
}
1 голос
/ 30 апреля 2019

Это невозможно напрямую, однако вы все равно можете вызвать Update и другие методы извне (используя другой активный MonoBehaviour)

0 голосов
/ 30 апреля 2019

Краткий ответ №.Однако, если я достаточно хорошо понимаю вашу проблему, вы можете попробовать деактивировать отдельные компоненты.

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