Wpis z mikrobloga

#unity3d #gamedev

Mireczki drogie, dłubie sobie trochę hobbystycznie w unity3d i ostatnio utknąłem trochę w jednym temacie.
Próbuję zaprojektować sieć przesyłu prądu z wytwórcami energii, przekaźnikami i odbiorcami (Coś jak w Factorio i Cities Skylines). Jakiś wstępny pomysł jest tzn. każdy element posiada informacje o elemencie z którym jest połączony i na podstawie tego jest kalkulowany stan sieci, przy czym rekalkulacja odbywa się w momencie gdy ulega modyfikacji którykolwiek element sieci. O ile pewnie to zadziała dla małych sieci.. o tyle dla większych to będzie na bank killer wydajności i pewnie da się to zrobić 1000x lepiej... ( ͡° ʖ̯ ͡°)
Ogólnie podejrzewam że ktoś już miał ten problem i go rozkminił a fajnie było by nie wynajdywać koła na nowo.
Zrobiłem spory research i przekopałem googla wzdłuż i wszerz.. ale podejrzewam że albo "cannot into google" albo mam pecha bo nie potrafię poprawnie sformułować nazwy problemu.

Do tej pory natrafiłem tylko na ten wątek na forum (https://forum.unity.com/threads/cables-to-pass-eletricity-between-objects.203853/) z jeden wątek o budowie maszyny stanów i pojedyncze tutoriale na yt nt. wykonywania grafów.

Może ktoś z was natrafił kiedyś na jakieś ciekawe materiały na ten temat albo jakąś przykładową implementację na githubie / gdziekolwiek. Albo może podpowiedzieć jak nazwać ten problem i pod jakimi frazami szukać. (Jak znacie jakiś płatny kurs / materiały gdzie jest omawiany ten temat to też styknie).

Z góry dziękuję ( ͡° ͜ʖ ͡°)
  • 8
@rossecki: właśnie robię coś co wymaga podobnego tworzenia łańcuchów z obiektów.
używam do tego nested lists. Każdy obiekt dostaję swoją listę gdzie na pozycji 0 jest on sam a na pozostałych mogą być przylegające do niego. Po dodaniu nowego obiektu do łańcucha można zmodyfikować zawartość list obiektów przylegających do niego dodając nowe obiekty do listy albo zastępując stare.
@LaserRock46AND2: Obliczam całą sieć dla przykładowej sytuacji:
1. Dodaje 2 łączniki i jednego odbiorcę, dodatkowy odbiorca przeciąża sieć która przestaje działać.
2. Usuwam tego nowego odbiorcę (Albo 1 z łączników do tego odbiorcy) i cała sieć zaczyna działać.

Raczej w obu przypadkach muszę przeliczyć / przebudować całą sieć żeby określić co się w niej znajduje po zmianach i czy sieć będzie działać czy nie.

W Cities skylines ciekawe mają to rozwiązane,
@rossecki: Nie jestem do końca pewien czy dobrze rozumiem co potrzebujesz zrobić i w jaki sposób chcesz obliczać obciążenie sieci itp.

Ale jakbyś po prostu zrobił jakiegoś managera sieci, który by przechowywał informacje o ilości elementów w sieci, czyli:
- Dodajesz nowy element sieci (łącznik/odbiorcę) to ten dodawany element musi sam się zgłosić do managera, że został podpięty. Wtedy Manager sobie go dodaje do puli i przelicza wydajność sieci (< tu-wstaw-swój-algorytm
@tlustywalec: Dzięki za sugestię, managera sieci też rozważam i będę właśnie w jego kierunku próbował robić implementację.

Podstawowy scenariusz:
1. Mamy elektrownię która produkuje x energii, mamy również słupy pomiędzy którymi są kable które "przenoszą energię" i mamy odbiornik który zużywa energię.

Teraz mogą następować różne modyfikacje sieci, dodanie nowego odbiornika, dodanie nowej kolejnej elektrowni itd. usunięcie kabla który łączy słupy, odbiorniki itd..
Sieć powinna odpowiednio na to reagować i w
@rossecki: > o tyle dla większych to będzie na bank killer wydajności i pewnie da się to zrobić 1000x lepiej

Zmierzyłeś, że faktycznie to jest problem? :) Zaczalbym od najprostszej opcji, a jak faktycznie wyjdzie że to jest za wolne to wtedy bym się bawił w optymalizacje. Ale wszystko zależy od rodzaju obliczeń. Jeżeli są proste, to powinno działać nawet co klatkę dla tysięcy obiektów.
@Krzychu_: @tlustywalec: Posiedziałem i udało mi się osiągnąć co potrzebowałem.
Zrobiłem zgodnie z konkluzją z wcześniejszego komentarza no i jestem super dumny.
Dobrze działa dodawanie obiektów do sieci, łączenie sieci, usuwanie sieci.
Teraz kolejny krok, ogarnąć jak dodać krzywe do linii aby wyglądały realistycznie i jak poprawić obsługę kamery i stawiania obiektów na "terrain". Jaram się.

Dzięki pany kaczki za pomoc ( )

Mały gif