機能紹介~ResourceManager~
どうも!Senkokusyaです!
今回は前回のObjectModelでも少し出てきたResourceManagerの解説となります!
では。
1.開発経緯
ゲームを開発する上でなくてはならない、テクスチャや3Dモデル。ここではそれらをまとめてリソース(Resource)と呼びます。
(音源はDirectXTKの仕様上、別口で管理しています。)
それらを使う際、いちいち使うたびに読み込んでいたらと~ても重いです。なので、ゲームが始まる前に全部読み込んでしまおう!(若干違うけど…)
と思い、開発したのが今回解説するResourceManagerとなります。
簡単に仕組みを言うならば
・ゲームが始まる前に必要なもの全部読み込む!
・必要になったらポインタを渡して同じモデルを再利用しよう!
という仕組みです。まぁ、自分は魔改造してもっと機能があるのですが…
では、早いですが機能解説になります~
2.機能
長くなるので、さらに細かく分けますね~
1.シングルトンで作成。
このクラスはデザインパターンの一つであるシングルトンを用いて作成しています。
このクラスは2つ以上生成されるとその分、保存しているリソースなどが生成されてしまうので、絶対に1つしか生成できない制約をつける必要があったためです。こうすることで、リソースの管理場所が2つ以上になることはありません。
2.Mapを用いたパスの省略
上の変数はテクスチャ用、下の変数は3Dモデル用となっており、
それぞれ対応した関数があり、引数にあらかじめString型で指定したキーを入れることで、対応したリソースを取得することができます。Mapで管理することでいちいちパスを入れることなく、リソースを取得できるようにしています。
3.外部ファイルでのリソース管理
今回は、ファイルをCSVファイルで管理している。
1行で一つのリソースを管理している。コンマで項目ごとに分けてある。
1つ目の数字は後々解説する、読み込みタイミングの指定。
2つ目の"M"とか"T"とかの文字は、このリソースがモデルなのか、テクスチャなのかを表している。これはモデルとテクスチャの管理しているディレクトリが異なるため、パスを生成する際に使用する。
3つ目のファイル名はリソースのファイル名を表す。これは2つ目の文字と同様、後々パスを生成する際に使用する。
4つ目の単語はそれぞれのリソースを呼び出すためのキーを設定してある。これを[2]で解説した関数の引数に入れることで、ファイルを取得することができる。
この管理方法には欠点が多くあり、今後余裕があればビルド時にキーを列挙型にしたヘッダーファイルとして出力、要素をコピペで使用できるようになると尚良いのではないかと思っている。
(ヘッダーファイル生成とかどうやってやるんや…)
4.読み込みタイミング
[3]の初めで解説した読み込みタイミングの解説。
何を指定しているのかというと、使用するシーンの設定をしている。
こんな感じであらかじめ列挙型でシーンを指定しておき、それぞれの番号に合ったリソースのみをそのシーンで読み込むという処理に使用している。
これにより、
タイトルシーンで使用するリソースはタイトルシーンだけ読み込む。
他のシーンでは読み込まない。
みたいな処理を行うことができる。
こちらも先ほど説明したヘッダーファイルにまとめることができたらな…と考えている。
終了!次回何かこっかな…
ではでは。