Łączenie skryptów

Programowanie w Unity.

Łączenie skryptów

Postprzez beazelek » 05 Wrz 2018, 18:34

Witam, mam problem..

Mianowicie, tworzę grę i pomyślałem sobie, że lepiej byłoby zamiast pisać jednego skryptu dla gracza, rozbić je na kilka mniejszych odpowiedzialnych za co innego. W jednym skrypcie umieściłem wszystkie floaty, boole, gameObjecty itp..
Reszta skryptów ma za zadanie odwoływać się do potrzebnych struktur (na zasadzie dziedziczenia, coś w stylu rodzic - dziecko)
Jednak gdy "Public class PlayerControl : MonoBehaviour" zmieniłem na Public class PlayerControl : Player (tak, by PlayerControl odwoływał się do skryptu Player) następuje efekt redundancji i w Unity wszystkie struktury zamiast wyświetlać się tylko w Playerze, występują we wszystkich skryptach

Ktoś wie, jak zrobić tak, żeby nie trzeba było się przy każdej funkcji odwoływać (np. Player.cośtam) i żeby wszystkie te struktury wyświetlały się tylko w jednym skrypcie?

Image
beazelek
 
Posty: 11
Rejestracja: 22 Lip 2018, 14:53
Has thanked: 0 time
Been thanked: 0 time

Re: Łączenie skryptów

Postprzez EvilArev » 05 Wrz 2018, 21:40

Wydaje się, że dziedziczenie wszystkich klas po "Player" jest niepotrzebne, a ułatwienia w komunikacji są tu tylko jednostronne.
Niech skrypty po prostu odnajdą się na starcie przez "GetComponent" i zapiszą referencję do lokalnej zmiennej. Ogólnie rozbicie funkcjonalności na osobne komponenty jest jak najbardziej właściwe, ale rozdzielenie powinno bazować na konkretnych zdaniach spełnianych przez skrypty, czyli np. osobny skrypt odpowiadający za poruszanie ludzika (ale ze wszystkimi potrzebnymi parametrami, jak prędkość, przyspieszenie, etc.) i osobny, który przetwarza dane z kontrolera i mówi poprzedniemu gdzie i kiedy iść. W takim wypadku mielibyśmy do czynienia ze skryptem postaci i skryptem sterowania. Skrypt sterowania można wtedy podmienić na skrypt SI, który korzystając z tych samych metod skryptu postaci, będzie poruszał przeciwnikami.
EvilArev
 
Posty: 354
Rejestracja: 14 Kwi 2013, 15:32
Has thanked: 0 time
Been thanked: 0 time

Re: Łączenie skryptów

Postprzez dawid621 » 05 Wrz 2018, 22:18

Wydaje mi się ze nie do końca chyba rozumiesz na czym polega dziedziczenie. Jak kolega wyżej wspomniał, na 90% zrobiłeś to źle. Jak chcesz sobie rozbić rożne rzeczy na poszczególne klasy, to stwórz sobie klase, nie dziedziczącą po MonoBehaviour, oznacz atrybutem Serializable (jeśli chcesz by jej pola publiczne były wyświetlane w inspektorze) i twórz sobie jej obiekty tam gdzie tego potrzebujesz.
dawid621
 
Posty: 176
Rejestracja: 07 Sie 2016, 18:52
Has thanked: 0 time
Been thanked: 0 time

Re: Łączenie skryptów

Postprzez beazelek » 05 Wrz 2018, 22:54

Jak najbardziej mogę tak zrobić, aczkolwiek chciałem żeby skrypty były możliwie jak najczystsze :). Jeszcze jedno pytanie. Widziałem gdzieś, w jakimś projekcie, że jak się zgadzał jeden skrypt do obiektu, to automatycznie wsadzany był jeszcze jeden. Były w jakiś sposób powiązane że sobą. Wiecie na jakiej zasadzie to działa?
beazelek
 
Posty: 11
Rejestracja: 22 Lip 2018, 14:53
Has thanked: 0 time
Been thanked: 0 time

Re: Łączenie skryptów

Postprzez EvilArev » 05 Wrz 2018, 23:27

Jak widać po inspektorze, to co zrobiłeś nie jest zbyt czyste :)
Do automatycznego dodawania innych skryptów służy atrybut "RequireComponent". W dokumentacji jest przykład jak dokładnie go użyć.
EvilArev
 
Posty: 354
Rejestracja: 14 Kwi 2013, 15:32
Has thanked: 0 time
Been thanked: 0 time

Re: Łączenie skryptów

Postprzez beazelek » 06 Wrz 2018, 06:50

Dzięki wielkie, pomogliscie mi bardzo
beazelek
 
Posty: 11
Rejestracja: 22 Lip 2018, 14:53
Has thanked: 0 time
Been thanked: 0 time

Re: Łączenie skryptów

Postprzez Ether_141 » 06 Wrz 2018, 14:34

Do dodawania componentów można też użyć https://docs.unity3d.com/ScriptReferenc ... onent.html
Awatar użytkownika
Ether_141
 
Posty: 375
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time


Wróć do Skrypty

Kto jest na forum

Użytkownicy przeglądający to forum: Google [Bot] oraz 10 gości