2017-01-06 4 views
1

Когда я пытаюсь использовать:GameObject.SetActiveRecursively (true) устарел?

GameObject.Find("teleportation").SetActiveRecursively(true); 

GameObject.SetActiveRecursively(bool) является устаревшим, это говорят, чтобы использовать GameObject.SetActive() вместо которой теперь наследуется детьми.

В моем иерархии у меня есть объект, активный, а его ребенок неактивен. Если я использую GameObject.SetActive() на активном объекте, ребенок НЕ активируется. Если я использую GameObject.SetActiveRecursively() на активном объекте, ребенок активируется.

Итак, должен ли я использовать что-то другое, чтобы активировать ребенка? Не понимаю, почему GameObject.SetActive() не будет работать.

+0

Я не вижу в документации, где он говорит Можете ли вы объяснить, что вы подразумеваете под этим заявлением? – Amy

+0

Быстрый поиск в Google предполагает, что эта функция устарела для [некоторое время] (http://answers.unity3d.com/questions/353475/setactiverecursively-is-now-obsolete-in-unity-40.html) сейчас - согласно в [documentation] (https://docs.unity3d.com/ScriptReference/GameObject.html) он не существует в самой новой версии вообще – UnholySheep

+0

@Amy Вы можете видеть это через код, линия подчеркнута зелеными волнами , это означает его обесценивание. –

ответ

3

SetActiveRecursively Функция устарела, как вы упомянули. Теперь вы должны использовать SetActive().

Вы можете использовать рекурсию и SetActive() для репликации функции SetActiveRecursively. Вы также можете поместить его в метод расширения.

public static class ExtentionMethod 
{ 
    public static void SetActiveRecursivelyExt(this GameObject obj, bool state) 
    { 
     obj.SetActive(state); 
     foreach (Transform child in obj.transform) 
     { 
      SetActiveRecursivelyExt(child.gameObject, state); 
     } 
    } 
} 

Использование: "GameObject.SetActive() ... теперь наследуется детьми"

GameObject obj = GameObject.Find("teleportation"); 
obj.SetActiveRecursivelyExt(true); 
+0

Так что функция, которая уже существовала и удобно позаботилась о работе, была устарела, не предлагая замену ..!? Почему это так? –

+0

@ThomasHilbert Это единство для вас. Замена - GameObject.SetActive() ', но его поведение немного отличается. – Programmer