Wpis z mikrobloga

Mirki szukam metody na wskazywanie skryptom obiektów w grze. Dotychczas używałem przeszukiwania wszystkich obiektów "GameObject.Find("hero"+playerNumber);" albo bezpośredniego linkowania ale to jest upierdliwe albo procesorożerne. Musi być jakaś metoda że np. podaję listę przyporządkowań np. hero1="GameObject.hero1" a Unity wie że jak go gdzieś wpiszę to chodzi o konkretnego ludka bez szukania i kombinowania

#unity3d #gamedev
ewolucja_myszowatych - Mirki szukam metody na wskazywanie skryptom obiektów w grze. D...

źródło: comment_jo7KRQIKkaz36zWDhG73yjLF2BNo6w33.jpg

Pobierz
  • 14
Może takie coś: masz jedne statyczne dictionary gdzieś w jakiejś klasie gdzie masz key jako string a val jako twój ludek i do każdego ludka dodajesz prosty skrypt który w funkcji Start dodaje go do tego statycznego globalnego dictionary . Potem jak będziesz potrzebował jakiegoś ludka po nazwie to szukasz w tym dictionary i masz.
@moje_bagno: czyli do dictionary dodaję jakby powiązania ludków tak samo jak do skryptu i potem tylko wskazuję który element z dictionary chcę wziąć? Czyli tak samo jakbym dodał wszystkich do jakiegoś globalnego skryptu i potem ciągnął z tego skryptu val który jest tym właśnie podlinkowanym ludkiem?
@denis-szwarc: Linq jest fajny i przyjemny w użyciu, ale ma spory narzut na wydajność. Radzenie użycie czegoś takiego w grze, w sytuacji gdy można to załatwić prostym dictionary jest delikatnie mówiąc nie na miejscu.

@ewolucja_myszowatych: Najłatwiej będzie zrobić tak jak doradził @moje_bagno . Przy tworzeniu nowego obiektu zapisujesz go do słownika i wyciągasz gdy potrzebujesz. Takie rozwiązanie ma swoje wady, ale będzie najprostsze do wykonania.
@ewolucja_myszowatych: Listy są dobrym pomysłem ale ich przeszukiwanie jest długie (żeby znaleźć ostatni element na liście należy przejść przez wszystkie elementy). W związku z czym wraz z ilością obiektów rośnie czas przeszukiwania. Za to dodawanie i usuwanie elementów z listy jest w miarę szybkie.

Jeśli elementy przechowywane w kolekcji są dodawane i usuwanie w miarę rzadko, to o wiele lepszym pomysłem jest przechowywanie jako hashTable ( https://docs.microsoft.com/pl-pl/dotnet/api/system.collections.hashtable?view=netframework-4.8 ). Dostęp do obiektu
@Hirunkan: linq raczej nie będzie żadnym problemem, dodatkowego narzutu nikt nie zobaczy o ile nie będzie wyszukiwania tysiące razy w każdej ramce.

Ja wszystko co mogę robię na linq i nigdy procesor nie jest bottleneckiem, zawsze to karta graficzna spowalnia grę.

Np ta moja gra: https://youtu.be/hvuMQvNec5o

Wszystko co można wymyślić używa list i linq, listy są nawet gdzieniegdzie tworzone co ramkę. Gra śmiga dobrze na starych androidach 4.1 i jedyne co