Ich versuche, die Gründe für das Design der Unity3D-Engine zu verstehen, und das kann ich noch nicht verstehen: Warum werden Daten in einer separaten Komponente gespeichert, anstatt Teil von GameObject zu sein, wie z. B. Name, Ebenenmasken und Stichworte? Es kann ohnehin nicht wie alle anderen Komponenten entfernt werden, es gibt keine Alternativen und daher muss es nicht entfernt werden.
architecture
unity
component-based
Schlange5
quelle
quelle
Antworten:
Nur die Unity-Entwickler können ihre wahre Motivation für diesen Entwurf angeben, aber ein Argument, das dies unterstützt, ist, dass es ein Argument gibt, dass jede Klasse in einem Softwareprojekt eine und nur eine Verantwortung übernehmen sollte . Das GameObject ist eine benannte Sammlung von Komponenten, und das Hinzufügen von Position / Drehung / usw. bedeutet, dass es zwei Verantwortlichkeiten hat. Die Transform-Komponente verwaltet Position und Drehung und sollte daher nicht für die Benennung oder Aggregation anderer (möglicherweise nicht zusammenhängender) Komponenten verantwortlich sein. Es ist also sinnvoll, dass diese beiden Konzepte in zwei separaten Objekten existieren.
Im Allgemeinen wird bei dieser Frage die Frage gestellt , warum Y nicht Teil von X ist und umgekehrt, wenn es eine 1: 1-Beziehung zwischen X und Y gibt. Und die allgemeine Antwort ist, dass Software einfacher zu entwickeln und zu warten ist, wenn sie in kleinere, in sich geschlossene Teile zerlegt wird, selbst wenn 2 Teile immer zusammenarbeiten.
quelle
Transformation ist eine obligatorische Komponente in Unity.
Der Grund, warum eine Transformation eine obligatorische Komponente ist, besteht darin, dass sich Spielobjekte in einer Szene befinden und daher räumliche Informationen (Position, Ausrichtung und Maßstab) über dieses Objekt benötigen. (Diese Informationen werden nicht immer verwendet, aber wenn die Transformationskomponente obligatorisch ist, werden die Dinge ein bisschen einfacher).
quelle
Das
TransformComponent
istComponent
in der Videospielarchitektur am schwierigsten zu entwerfen. Fast jeder andereComponent
muss über dieGameObject
Position, Drehung oder Skalierung eines bestimmten Objekts Bescheid wissen. Daher ist es von Natur aus schwierig, alle diese miteinander verbundenen Systeme ordnungsgemäß zu entkoppeln.In der Architektur wird es immer Kompromisse geben. Wenn
TransformComponent
Entwickler bei Unity statisch (dh nicht dynamisch) sind, können sie unter dieser Annahme Code schreiben. Ich würde annehmen, dass dies die Dinge auf ihrer Seite viel einfacher macht, ohne dass dies für unsere Seite eine große Unannehmlichkeit darstellt. Das ist vergleichbar mit einem objektorientierten Paradigma, woGameObject
würdenextend
einigeabstract class
,Transformable
.quelle