私はUnity3Dエンジンの設計の背後にある理由を理解しようとしていますが、これはまだ頭を悩ませることができないものです:なぜ、名前、レイヤーマスク、タグ?とにかく他のすべてのコンポーネントのように削除することはできません。代替手段がないため、削除する必要はありません。
私はUnity3Dエンジンの設計の背後にある理由を理解しようとしていますが、これはまだ頭を悩ませることができないものです:なぜ、名前、レイヤーマスク、タグ?とにかく他のすべてのコンポーネントのように削除することはできません。代替手段がないため、削除する必要はありません。
回答:
Unityの開発者のみがこの設計に対する真の動機付けを与えることができますが、この方法でそれを行うことを支持する1つの論点は、ソフトウェアプロジェクトの各クラスが1つの責任のみを処理する必要があるという論点があるということです。GameObjectはコンポーネントの名前付きコレクションであり、それに位置/回転/などを追加すると、2つの責務を負うことになります。Transformコンポーネントは、位置と回転を処理するため、他の(潜在的に関連のない)コンポーネントの命名または集約を行うべきではありません。したがって、これら2つの概念が2つの別々のオブジェクトに存在することは理にかなっています。
より一般的には、この質問は「XとYの間に1対1の関係がある場合、なぜYはXの一部ではないのですか?」一般的な答えは、2つの部分が常に連携して動作する場合でも、ソフトウェアがより小さな自己完結型の部分に分割されると、開発と保守が容易になることです。
変換は、Unityの必須コンポーネントです。
変換が必須コンポーネントである理由は、ゲームオブジェクトがシーンに配置されているため、そのオブジェクトに関する空間情報(位置、方向、スケール)が必要だからです。(この情報は常に使用されるわけではありませんが、変換コンポーネントを必須にすると、物事が少し簡単になります)。
これTransformComponent
は、Component
ビデオゲームアーキテクチャで適切に設計することが最も難しいものです。ほぼすべての人Component
が、特定GameObject
のの位置、回転、またはスケールについて知る必要があるため、これらの相互に関連するシステムをすべて適切に分離することは本質的に困難です。
アーキテクチャには常にトレードオフがあります。TransformComponent
Unityの開発者は、静的(動的ではない)であることにより、この仮定の下でコードを作成できます。これは、私たちの側に多くの不便さを加えることなく、彼らの側で物事をはるかに簡単にするだろうと思います。これは、オブジェクト指向のパラダイム、に似ているGameObject
だろうextend
いくつかのabstract class
、Transformable
。