2Dまたは3Dでは、エンティティコンポーネントシステム(ECS)は、少なくとも同じECSの一部でない場合、GUIシステムにアクセスできる必要があります。
個人的には、この2つを混ぜることはしません。GUIのコードの再利用性は、実際にはトップレベルでのみ発生します。マウス/キーボード、レンダリングなどへの応答。さまざまなボタンがとる機能、または特定のリストに表示される情報は、実際には、再利用できるほど汎用的にできるものではありません。
たとえば、GUIエンティティのコンポーネントはposition
、render
およびのようなものになると思いgui
ます。GUIコンポーネントがGUIエンティティが実行するアクションのタイプを定義する場所。ただし、そのアクションは非常にユニークでコンテキスト固有のものになります。これにより、GUIコンポーネントを処理するシステムが非常に大きくなり、基本的に各GUI機能(ゲームのロード、ゲームの保存、サーバーの検索など)を処理するように設計されます。乱雑に聞こえます。
GUIの「画面」ごとに標準クラスファイルを作成したいと思います。その画面のすべての機能を1つの場所に(共通の機能クラスへの参照とともに)持っている。すっきりと管理しやすいです。
ただし、前述したように、ECSはGUIシステムにアクセスできる必要があります。システムのエンティティに基づいてGUIに情報を提供できる必要があります。たとえば、味方ユニットにカーソルを合わせると、そのユニットに関するすべての情報を含むGUIウィンドウがポップアップ表示されます。敵の団結の上にホバリングすると、情報が限られたGUIウィンドウがポップアップします。2つの違いを知るためにGUIをプログラミングしたくない場合、エンティティに情報を表示するように要求したい場合があります。
そのため、エンティティにはおそらく何らかのGUIコンポーネントがありますが、GUIエンティティではなく「ゲーム内」のエンティティになります。このコンポーネントは、外部GUIシステムを使用してGUIインターフェイスを作成します。