GameData クラスはシングルトンクラスですので、
外部のスクリプトからの参照情報が取得しやすいです。
この手順では、拠点の耐久力や、エネミーの最大生成数といった、
各スクリプトに個別に設定して利用していたゲームの設定情報を、
GameData クラスに集約し、GameData クラスで設定した情報を、各スクリプトが参照して受け取って利用していく、という設計に変更します。
各スクリプトに設定情報があるということは、
何か変更がある場合や確認を行う際には、それぞれのスクリプトを変更したり、ヒエラルキーで確認する必要がありました。
それは今までの設計上では仕方のないことでしたが、
GameData クラスを作成したことにより、このクラスを中心に、ゲームの設定を用意するように変えることが可能です。
DefenseBase スクリプトで管理していた耐久力の値の変数と、EnemyGenerator スクリプトで管理していたエネミーの最大生成数の変数を
それぞれ同じ型で GameData クラスに用意します。この値もインスペクターで設定可能な SerializeField 属性を付与して宣言を行います。
こうすることで、いままで設定を行う際に、各スクリプトのアタッチされているゲームオブジェクトを選択して設定するという動作を
GameData クラスのアタッチされている GameData ゲームオブジェクトのインスペクターからまとめて変更出来るようにします。
<完成図>
あとはこの情報を DefenseBase スクリプトや EnemyGenerator スクリプトで利用できるように、
GameData クラスに、それぞれの値の戻り値を持つメソッドを作成して、そのメソッドを各スクリプトより呼び出して必要な値を取得する方法に処理を変更します。
ここでは処理を変更しながら、シングルトンクラスの利用方法と、戻り値を持つメソッドの利用方法を復習します。
処理の修正方法は、今までと同じです。
ロジックとしては DefenseBase スクリプトと EnemyGenerator スクリプトの修正が必要になりますが、
最初に GameData クラスを修正して、耐久力の値とエネミーの最大生成数の値の情報を追加し、それらのスクリプト用にメソッドを用意します。
それから、各スクリプトを修正して完成させていきます。