はい、これは私のゲーム エンジンに関する別の質問です。非常に順調に進んでいます。皆さんのおかげです。
したがって、ビデオを見た (または見ていない) 場合、ゲーム内のオブジェクトは、位置、スプライト、動き、衝突、音、ヘルスなどのさまざまなコンポーネントで構成されています。エンティティとコンポーネント間の通信をタイプしますが、これはこれまでのところしかありません。エンティティの位置など、何かを尋ねる必要がある場合がたくさんあります。
私のコードには、次のような行が数十行あります。
SomeComponent comp = (SomeComponent)entity.GetComponent(typeof(SomeComponent));
if (comp != null) comp.GetSomething();
私はこれが非常に醜いことを知っており、キャストが不適切な OO 設計のにおいがすることを知っています。しかし、物事が複雑であるほど、より良い方法はないようです。もちろん、コンポーネントの種類を「ハードコーディング」して、
SomeComponent comp = entity.GetSomeComponent();
しかし、それは警官のようで、悪いものです。
私は文字通り、これを書いているときに、コードを何ヶ月も解決策なしでこのようにしていた後、ジェネリックが私を助けることに気づきました。
SomeComponent comp = entity.GetComponent<SomeComponent>();
それがどのように機能するかは驚くべきことです。とにかく、これはまだセマンティックの改善にすぎません。私の疑問は残ります。
- これは実際にそんなに悪いことですか?
- より良い代替手段は何ですか?