Я бы порекомендовал вам пересмотреть свой дизайн.
Деактивация всего объекта специально предназначена для удаления объекта из мира, не удаляя его.Он больше не должен участвовать в любой форме сцены (в качестве примечания вы заметите, что 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();
}
}