Unity 3d wyłączanie danych komponentów c#

Unity 3d wyłączanie danych komponentów c#
K6
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:28
0

Witam
Potrzebuje wyłączać wybrane komponenty obiektach.

Kopiuj
 public void SaveComponents(GameObject obj, out List<Package> lista)
    {
        print("SAVE");
        //Pobieramy wszystkie komponenty z obiektu
        Component[] components = obj.GetComponents(typeof(Component));
}

Widziałem że kiedyś robili to tak

Kopiuj
 components[1].enable = false;

lecz niestety teraz ta opcja nie działa i nie wiem czym ją zastąpili.
Jedyną znana mi opcja jest ten przykład:

Kopiuj
 obj.getcomponent<komponent>().enable = false;

ale jak w nawias ostrokątny mam wstawić komponent z tablicy?
nie wiem w jaki sposób mam wydobyć referencje z komponentu :/

edytowany 3x, ostatnio: kafar610
E9
  • Rejestracja:ponad 13 lat
  • Ostatnio:12 miesięcy
  • Postów:395
0
Kopiuj
foreach(var component in components)
            component.enabled = false;
edytowany 1x, ostatnio: error91
JU
  • Rejestracja:około 22 lata
  • Ostatnio:3 miesiące
  • Postów:5042
0

Jesteś pewien, że nie działa

Kopiuj
 components[i].enable = false;

a nie:

Kopiuj
 Component[] components = obj.GetComponents(typeof(Component));

?

Od którejś wersji Unity, komponenty pobiera się generycznie. Czyli: obj.GetComponents<Component>();

K6
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:28
0

W przypadku error91 i Juhas wyskakuje ten sam błąd "'Component' does not contain a definition for 'enable' and no extension method 'enable' accepting a first argument of type 'Component' could be found (are you missing a using directive or an assembly reference?)'"
title

edytowany 1x, ostatnio: kafar610
Zobacz pozostałe 2 komentarze
B1
Pobieraj w taki sposób componenty: GetComponents<HingeJoint>(); Tu masz wyjaśnione dlaczego: https://docs.unity3d.com/Manual/GenericFunctions.html
K6
Dobra a jest jakiś sposób abym nie musiał ręcznie wpisywać klasy?
B1
GetComponents<Component>(); ;)
K6
Zrobiłem tak: var cos = obj.GetComponents<Component>(); cos[0].enabled = false; W dalszym ciągu nie wyszukuje "enabled", dalej muszę ręcznie wpisywać klasę...
B1
Dobra racja, Component nie ma enabled. Spróbuj może takiego workaround: (cos[0] as MonoBehaviour).enabled = false;
K6
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:28
0

Wrzucam działający kod, wszystkim dzięki za pomoc :P

Kopiuj
 for (int o = 0; o < components.Length; o++)
        {
            var tak = obj.GetComponents<Behaviour>();
            tak[5].enabled = false;
            print(tak[5]);
        }
E9
Po co ci ta pętla :D
K6
To na później ale już sobie napisałem :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.