Wpis z mikrobloga

@pr0t3r: Mam taki mały problem. Mam coś takiego: GetComponent().voidZtegoSkryptu(); jak wrzucę do Startu wyrzuca mi błąd: NullReferenceException: Object reference not set to an instance of an object jak wrzuce do update, to działa. Masz może jakiś pomysł, co może być sknocone?
  • Odpowiedz
@Wextor: Delay to słaba odpowiedź :P Bo na każdy problem nie można delayem odpowiadać, nagle zanim Ci gra się załaduje, dokładasz dodatkowe sekundy. No chyba że jedyna, bo mocno samuk (unity c#) jestem i pewno sporo błędów robię. Natomiast w javie bym tak nie zrobił nigdy, bo to workaround straszny ;p
@MarcelMcOne: (i inni), nie lepiej wrzucić tego buttona jako public i wcisnąć to tam przez inspectora? Ale
  • Odpowiedz
@Sarseth: Samo update nie rzutuje w żaden sposób dopóki nic tam nie dasz :) Generalnie jest tak że operacje tworzenia obiektów są bardzo zasobożerne i to ich powinno się unikać w update. Niszczenie też, ale to akurat Unity załatwia asynchrnicznie. Sprawdzanie inputów to żaden problem, w unity tak to zostało specjalnie zaprojektowane (w porównaniu do innych sposobów gdzie robi się to np. za pomocą eventów)

Co do tworzenia obiektów to
  • Odpowiedz
@Sarseth: zrob eksperyment - miej 50 obiektów i zrob funkcje.
jezeli wcisniesz guzik B
to 50 obiektów move.forward

ja przy czyms takim miałem klatkowanie gry. potem sie zorientowalem ze lepiej ten skrypt dac w kamere, i wszystko dziala idealnie
  • Odpowiedz
jak funkcja Update rzutuję na wydajność aplikacji


@MarcelMcOne: Funkcja update jest taka jak każda inna funkcja do wywołania w danym języku programowania/platformie, więc jej narzut jest pomijalny. Jedyna różnica, pomiędzy zwykłą metodą a metodami Unity typu Update, Awake, Start itp jest sposób, w jaki Unity ich wyszukuje w obiektach - w efekcie możesz mieć Update jako protected a nawet private i to nie ma znaczenia na jej wywołanie, nadal będzie wołana przez Unity.
Tutaj masz nieco info na temat czasu wywołania różnego rodzaju funkcji: http://jacksondunstan.com/articles/2998 (ogólnie cały blog traktuje o wydajności i czasie wykonania wszystkiego, poczytaj jeśli Cię to martwi ;) ).
Jako bonus, tutaj jest cykl życia obiektów w Unity:
  • Odpowiedz
@Mithras: ja obecnie mam ponad 500 i tez działa, ale funkcja update jest jedna z wazniejszych jeżeli chodzi o wydajność. i jedna linijka kodu tam, może wszystko popaskudzić.
  • Odpowiedz
@MarcelMcOne: Napisz w jaki sposób jest dodawany komponent guiButton, że musisz stosować opóźnienia w update, żeby nie mieć NRE, bo to złe jest. :P Jakiś kod też by się ewentualnie przydał.
  • Odpowiedz
@MarcelMcOne: Dokładnie tak jest. :) W Unity wyklikaj Edit -> Project Settings -> Script Execution Order. Z dużym prawdopodobieństwem chcesz, aby Twój manager był wykonywany jako jeden z pierwszych skryptów, więc musisz go dodać do tej listy skryptów i ustawić jakąś wartość ujemną. Wówczas Unity wykona najpierw skrypty z jak najniższą wartością a dopiero później całą resztę (domyślnie wszystkie skrypty mają bodaj 0, więc wpisy z dodatnią wartością będą
  • Odpowiedz