ゲームコードの構造化に関する質問の答えを読んだところです。ユビキタスGameManager
クラスについて、そしてそれが本番環境でどのように頻繁に問題になるのかと思いました。これについて説明しましょう。
まず、プロトタイピングがあります。素晴らしいコードを書くことを誰も気にせず、ゲームプレイが積み重なるかどうかを確認するために何かを実行しようとします。
その後、グリーンライトがあり、物事をきれいにするために、誰かがを書きますGameManager
。おそらく、たくさんのを保持するために、おそらくGameStates
いくつかを保存するためGameObjects
に、実際には大きなものはありません。かわいい、小さな、マネージャー。
プリプロダクションの穏やかな領域では、ゲームはうまく形成されています。コーダーには、適切な睡眠の時間と、素晴らしいデザインパターンを使用して物事を構築するための多くのアイデアがあります。
その後、生産が開始され、もちろん、すぐにクランチタイムがあります。バランスの取れた食事はなくなり、バグトラッカーは問題を抱えて割れ、人々はストレスを感じ、昨日ゲームをリリースする必要があります。
その時点で、通常、GameManager
ある本物のビッグ(滞在丁寧に)混乱。
その理由は簡単です。結局のところ、ゲームを作成するときは、すべてのソースコードが実際にゲームを管理するためにここにあります。この小さな追加機能またはバグ修正をに追加するだけで、他のすべてがとにかく保存されます。時間が問題になると、別のクラスを記述したり、この巨大なマネージャーをサブマネージャーに分割する方法はありません。GameManager
もちろん、これは古典的なアンチパターン、つまり神オブジェクトです。それは悪いことであり、合併する痛み、維持する痛み、理解する痛み、変革する痛みです。
これを防ぐために何を提案しますか?
編集
名前のせいにするのは魅力的だと思います。もちろん、GameManager
クラスを作成することはそれほど素晴らしい考えではありません。しかし、同じことがクリーンに起こることができるGameApplication
か、GameStateMachine
またはGameSystem
、ダクトテープの好きなプロジェクトの終わりまでになってしまうこと。命名に関係なく、ゲームコードのどこかにそのクラスがあります。これは現時点では単なる胚に過ぎません。どのモンスターになるかはまだわかりません。したがって、「ネーミングのせいにする」という答えは期待していません。これが発生しないようにする方法、コーディングアーキテクチャ、および/またはチームが本番のいずれかの時点で発生することを知って従うことができるプロセスが必要です。1か月間のバグ修正と土壇場での機能が、それらがすべて1つの巨大な保守不能なマネージャーになったという理由だけで、言うのを捨てるのはあまりにも悪いことです。
GameManager
上記で説明した- 効果にさらされることなく、ゲーム全体のロジックをどのように制御しますか。