Unity3Dエンジン設計の背後にある理由(ゲームオブジェクト/変換コンポーネント)


14

私はUnity3Dエンジンの設計の背後にある理由を理解しようとしていますが、これはまだ頭を悩ませることができないものです:なぜ、名前、レイヤーマスク、タグ?とにかく他のすべてのコンポーネントのように削除することはできません。代替手段がないため、削除する必要はありません。


私には、これはアーキテクチャのレガシーのように聞こえます。おそらくこの変換コンポーネントは、以前はオプションのコンポーネントであったため、デカルト空間の「外」にオブジェクトを置くことができました。その後、実装の制約(最適化?)により、このコンポーネントが常に存在する必要があり、このままでした。しかし、それは単なる推測であり、Unityのエンジニアが実際にその質問に答える必要があります。
ローランクーヴィドゥ

回答:


11

Unityの開発者のみがこの設計に対する真の動機付けを与えることができますが、この方法でそれを行うことを支持する1つの論点は、ソフトウェアプロジェクトの各クラスが1つの責任のみを処理する必要があるという論点があるということです。GameObjectはコンポーネントの名前付きコレクションであり、それに位置/回転/などを追加すると、2つの責務を負うことになります。Transformコンポーネントは、位置と回転を処理するため、他の(潜在的に関連のない)コンポーネントの命名または集約を行うべきではありません。したがって、これら2つの概念が2つの別々のオブジェクトに存在することは理にかなっています。

より一般的には、この質問は「XとYの間に1対1の関係がある場合、なぜYはXの一部ではないのですか?」一般的な答えは、2つの部分が常に連携して動作する場合でも、ソフトウェアがより小さな自己完結型の部分に分割されると、開発と保守が容易になることです。


私もそれを考えましたが、同じ理由でGameObjectのフィルタリング(レイヤー、タグ)を別のコンポーネントに移動できましたが、そうではありませんでした。さらに、変換コンポーネントは、階層データ(親、子など)を保持することにより、システム内で深く結び付けられています。
snake5

1
レイヤーとタグは命名の形式であり、名前と一緒に存在する必要があるため、システム内のコンポーネントのコレクションを構成するものの本質的な部分であると主張できます。子育てを保持している変換に関しては、あなたはポイントを持っていますが、Unityシステムが完璧であると主張する人はいません。私のシステムであれば、Transformsを個別に保持し、親/子をGameObjectに再配置します。
キロタン

1

変換は、Unityの必須コンポーネントです。

変換が必須コンポーネントである理由は、ゲームオブジェクトがシーンに配置されているため、そのオブジェクトに関する空間情報(位置、方向、スケール)が必要だからです。(この情報は常に使用されるわけではありませんが、変換コンポーネントを必須にすると、物事が少し簡単になります)。


1
問題は、コンポーネントベースのデザインとは何ではありません。それはについてです「変換」と同様の構成要素ではない理由
bummzack

1
しかし、TransformはUnityのコンポーネントです!docs.unity3d.com/Documentation/ScriptReference/Transform.html。変換に関する唯一の奇妙なことは、それがGameObjectの必須コンポーネントであることです。
モーテンノベル

さて、質問は削除できない理由についてだと思いますか?OPが用語に慣れていなければ、OPは彼の質問に「コンポーネントベース」というタグを付けませんでした。
-bummzack

あなたは正しい-ありがとう。質問の回答を改善するために回答を更新しました。
モーテンノベル

3
問題は、変換データが別のコンポーネントである理由です(名前、レイヤーマスク、タグなどのGameObject内のプレーンデータとは対照的です)。私は投稿の最新版でそれをより明確にしようとしました。
snake5

0

これTransformComponentは、Componentビデオゲームアーキテクチャで適切に設計することが最も難しいものです。ほぼすべての人Componentが、特定GameObjectのの位置、回転、またはスケールについて知る必要があるため、これらの相互に関連するシステムをすべて適切に分離することは本質的に困難です。

アーキテクチャには常にトレードオフがあります。TransformComponentUnityの開発者は、静的(動的ではない)であることにより、この仮定の下でコードを作成できます。これは、私たちの側に多くの不便さを加えることなく、彼らの側で物事をはるかに簡単にするだろうと思います。これは、オブジェクト指向のパラダイム、に似ているGameObjectだろうextendいくつかのabstract classTransformable

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.