Próbuję zrozumieć uzasadnienie konstrukcji silnika Unity3D i jest to coś, o czym jeszcze nie mogę się zastanowić : dlaczego dane transformacji są przechowywane w osobnym składniku, zamiast być częścią GameObject, jak nazwa, maski warstw i tagi? Zresztą nie można go usunąć tak jak wszystkich innych komponentów, nie ma alternatywy, a zatem nie trzeba go usuwać.
architecture
unity
component-based
snake5
źródło
źródło
Odpowiedzi:
Tylko programiści Unity mogą dać prawdziwą motywację do tego projektu, ale jednym argumentem przemawiającym za zrobieniem tego w ten sposób jest argument, że każda klasa w projekcie oprogramowania powinna ponosić jedną i tylko jedną odpowiedzialność . GameObject to nazwana kolekcja Komponentów, a dodanie pozycji / rotacji / etc do tego oznacza, że miałby on 2 obowiązki. Komponent Transform obsługuje położenie i obrót, dlatego też nie powinien być odpowiedzialny za nazewnictwo ani agregowanie innych (potencjalnie niepowiązanych) komponentów. Dlatego te 2 koncepcje mają sens w 2 osobnych obiektach.
Mówiąc bardziej ogólnie, pytanie to brzmi „jeśli istnieje relacja 1 do 1 między X i Y, dlaczego Y nie jest częścią X lub odwrotnie?” I ogólna odpowiedź jest taka, że oprogramowanie jest łatwiejsze do opracowania i utrzymania, gdy jest podzielone na mniejsze samodzielne części, nawet jeśli 2 części zawsze współpracują razem.
źródło
Transformacja jest obowiązkowym elementem Jedności.
Powodem, dla którego transformacja jest obowiązkowym elementem, jest to, że obiekty gry znajdują się w scenie i dlatego potrzebują informacji przestrzennych (pozycji, orientacji i skali) na temat tego obiektu. (Ta informacja nie zawsze jest wykorzystywana, ale utrzymanie obowiązkowego komponentu transformacji sprawia, że rzeczy są nieco prostsze).
źródło
Jest
TransformComponent
to najtrudniejszyComponent
do prawidłowego zaprojektowania w architekturze gier wideo. Prawie każdy innyComponent
musi wiedzieć o danymGameObject
pozycji, rotacji lub skali, więc prawidłowe oddzielenie wszystkich tych wzajemnie powiązanych systemów jest z natury trudne.W architekturze zawsze pojawią się kompromisy. Będąc
TransformComponent
statycznym (tj. Nie dynamicznym), programiści w Unity mogą pisać kod przy takim założeniu. Zakładam, że dzięki temu rzeczy stają się znacznie łatwiejsze po ich stronie, nie powodując przy tym znacznych niedogodności. Jest to podobne do paradygmatu obiektowego, gdzieGameObject
będzieextend
pewnymabstract class
,Transformable
.źródło