私は過去3〜4年間、趣味のプロジェクトに取り組んでいます。シンプルな2Dおよび3Dゲーム。しかし最近、より大きなプロジェクトを始めました。ここ数か月間、私はすべてのゲームオブジェクトのベースとなるゲームオブジェクトクラスを設計しようとしていました。何度も試行錯誤を繰り返した後、グーグルに目を向けると、すぐにいくつかのGDC PDFおよびPowerPointが示されました。そして今、私はコンポーネントベースのゲームオブジェクトを把握しようとしています。
エンジンはゲームオブジェクトを作成し、その後、健康、物理学、ネットワークなどの処理を行うさまざまなコンポーネントをアタッチすることを理解しています。しかし、私が理解していないのは、コンポーネントXがYがオブジェクトの状態を変更したかどうかを知る方法です。健全性はHealthComponentによって制御されているため、PhysicsComponentはプレーヤーが生きているかどうかをどのように知るのでしょうか。そして、HealthComponentはどのようにして「プレイヤーが死んだアニメーション」を再生しますか?
私はそれが次のようなものであると感じていました(HealthComponent内):
if(Health < 0) {
AnimationComponent.PlayAnimation("played-died-animation")
}
しかし、もう一度、HealthComponentは、どのように接続されているゲームオブジェクトにAnimationComponentが接続されていることを知るのでしょうか?私がここで見る唯一の解決策は
AnimationComponentがアタッチされているかどうかを確認してください(コンポーネントコード内またはエンジン側)
コンポーネントには他のコンポーネントが必要ですが、それはコンポーネント設計全体と戦うようです。
HealthWithAnimationComponent、HealthNoAnimationComponentなどのように書きます。これもコンポーネント設計のアイデア全体と戦うようです。