Unity3D 엔진 디자인의 이유를 이해하려고하는데 아직 머리를 can 수없는 것입니다. 왜 이름, 레이어 마스크 및 태그? 어쨌든 다른 모든 구성 요소와 같이 제거 할 수 없으므로 대안이 없으므로 제거 할 필요가 없습니다.
Unity3D 엔진 디자인의 이유를 이해하려고하는데 아직 머리를 can 수없는 것입니다. 왜 이름, 레이어 마스크 및 태그? 어쨌든 다른 모든 구성 요소와 같이 제거 할 수 없으므로 대안이 없으므로 제거 할 필요가 없습니다.
답변:
Unity 개발자 만이이 디자인에 대한 진정한 동기를 부여 할 수 있지만, 이러한 방식으로이를 지원하는 데있어 한 가지 주장 은 소프트웨어 프로젝트의 각 클래스가 하나의 책임만을 처리해야한다는 주장입니다 . 게임 오브젝트는 컴포넌트의 이름이 지정된 컬렉션이며, 위치 / 회전 / 등을 추가하면 2 가지 책임이 있습니다. 변환 구성 요소는 위치와 회전을 처리하므로 다른 (잠재적으로 관련되지 않은) 구성 요소의 이름을 지정하거나 집계 할 책임도 없습니다. 따라서이 두 개념이 두 개의 개별 객체에 존재하는 것이 합리적입니다.
보다 일반적으로,이 질문은 "X와 Y 사이에 1 : 1 관계가 있다면, Y는 왜 X의 일부가 아니거나 그 반대입니까?" 그리고 일반적인 대답은 2 개의 부품이 항상 함께 작동하더라도 작은 독립형 부품으로 나눌 때 소프트웨어를 개발하고 유지 관리하기가 쉽다는 것입니다.
Transform은 Unity의 필수 구성 요소입니다.
변환이 필수 구성 요소 인 이유는 게임 개체가 장면에 있고 해당 개체에 대한 공간 정보 (위치, 방향 및 크기)가 필요하기 때문입니다. 이 정보가 항상 사용되는 것은 아니지만 변환 구성 요소를 필수로 유지하면 상황이 좀 더 단순 해집니다.
는 TransformComponent
가장 어려운 Component
제대로 비디오 게임 건축 설계. 거의 모든 Component
사람들이 주어진 GameObject
위치, 회전 또는 스케일 에 대해 알아야 하므로 이러한 모든 관련 시스템을 적절하게 분리하는 것은 본질적으로 어렵습니다.
아키텍처에는 항상 상충 관계가 있습니다. 가짐으로써 TransformComponent
정적 (즉,하지 동적), 유니티에서 개발자는이 가정에서 코드를 작성할 수 있습니다. 나는 이것이 우리 편에 많은 불편을 끼치 지 않고 그들의 편이 훨씬 쉬워 진다고 가정합니다. 이는 객체 지향 패러다임에 가깝다 GameObject
것 extend
약간 abstract class
, Transformable
.