Я пытаюсь понять причины, лежащие в основе дизайна движка Unity3D, и это то, чего я пока не могу понять: почему данные преобразования хранятся в отдельном компоненте, а не являются частью GameObject, такими как имя, маски слоев и теги? В любом случае его нельзя удалить, как и все другие компоненты, альтернатив нет, и поэтому нет необходимости его удалять.
architecture
unity
component-based
snake5
источник
источник
Ответы:
Только разработчики Unity могут дать свою истинную мотивацию для этого дизайна, но один аргумент в поддержку такого подхода состоит в том, что есть аргумент, что каждый класс в программном проекте должен нести одну и только одну ответственность . GameObject - это именованная коллекция компонентов, и добавление положения / поворота / и т. Д. Означает, что у него будет 2 обязанности. Компонент Transform обрабатывает положение и поворот и поэтому не должен отвечать за присвоение имен или агрегирование других (потенциально не связанных) компонентов. Поэтому имеет смысл, чтобы эти 2 понятия существовали в 2 отдельных объектах.
В более общем плане, этот вопрос спрашивает: «Если между X и Y существует отношение 1 к 1, почему Y не является частью X или наоборот?» И общий ответ заключается в том, что программное обеспечение легче разрабатывать и поддерживать, если разбить его на более мелкие автономные части, даже если две части всегда работают вместе.
источник
Преобразование является обязательным компонентом в Unity.
Причина, по которой преобразование является обязательным компонентом, заключается в том, что игровые объекты расположены на сцене и для этого требуется пространственная информация (положение, ориентация и масштаб) об этом объекте. (Эта информация не всегда используется, но сохранение обязательного компонента преобразования делает вещи немного проще).
источник
Это
TransformComponent
наиболее сложныйComponent
для правильного проектирования в архитектуре видеоигр. Почти все остальныеComponent
должны знать о заданномGameObject
положении, вращении или масштабе, поэтому должное разделение всех этих взаимосвязанных систем по своей сути затруднительно.В архитектуре всегда будут компромиссы. Будучи
TransformComponent
статичными (то есть не динамическими), разработчики в Unity могут писать код в соответствии с этим предположением. Я предположил бы, что это делает вещи намного легче с их стороны, не добавляя большого количества неудобства с нашей стороны. Это похоже на объектно-ориентированную парадигму, гдеGameObject
быextend
какой - тоabstract class
,Transformable
.источник