また、懲りずに、コンテンツ・パイプラインと悪戦苦闘。
と、言うか、日本語の資料が少ないんじゃー!
さて、
NyaRuRuさんの以下の記事の2ページ目を参考にして、Dictionary<String, int> の int をパターン表示用の独自クラス PatternData に変更してみた。
第5回 ゲーム開発者にとってのビルド作業とは? ― Content Pipelineを使ってみる が、XML ファイルのインポートでクレームが出る。
XmlImporter君:
PatternData なんて、見つからんよ? PatternData クラスをちゃんと書いてるから、血眼になって探せば見つかるはずなのに、何て、根性の無い奴だ。
いや、ちょっと、待てよ? 俺達はとんでもない勘違いをしていたのかも知れない。
と、XmlImporter君の立場になって考えると、コンテンツのインポート後に、PatternData クラスがコンパイルされるはずだから、見つかるはずが無い事に気づく。
なるほど、納得だ。
じゃあ、これをゲームライブラリに持っていけば、良かろうだ!
と、ゲームライブラリを作成して、参照と Properties の Content Pipeline に追加。
で、再チャレンジ。
XmlImporter君:
PatternData なんて、見つからんよ? おや? あ、namespace つけてなかった。
<Asset Type="Generic:Dictionary[string,PatternData]">
↓
<Asset Type="Generic:Dictionary[string,PatternDataLibrary.PatternData]">
よし、これで、どうよ?
XmlImporter君:
PatternDataLibrary.PatternData の ContentTypeWriter が見つからんよ? ContentTypeWriter? え~と、ああ、これか。じゃあ、ContentTypeWriter<PatternData> で派生して書けば良いのか。
ん? GetRuntimeReader 関数で、リーダーの名前を返さないとダメなのか。ContentTypeReader<PatternData> の派生クラスも作って、"PatternDataLibrary.PatternDataTypeReader"を返すようにコーディング。
さて、ビルドだ。
XmlImporter君:
PatternDataLibrary.PatternData の ContentTypeWriter が見つからんよ? 工工エェ(´Д`)ェエ工工
仕方が無いので、ContentTypeWriter げググる。
グーグル君曰く
選択された言語のページからは該当するページが見つかりませんでした。ウェブ全体からのContentTypeWriterの検索結果: ContentTypeWriter の検索結果 約 42 件中 1 - 7 件目 (0.23 秒) 工工エェ(´Д`)ェエ工工
42件って、日本語で言うと何件?(答え:42件)
しょうがないので、
このページをチェック。
あ、なんか、クラスの手前に「[ContentTypeWriter]」って書いてある。それか!
早速、追加して、ビルド。ビルド成功。ふ~。
じゃあ、さっそく、実行。って、
冷害例外?
なぜか、コンテンツのロードで、例外が発生。PatternDataLibrary.PatternDataTypeReader が無いって、何で?
良くわからんので、また、ネットの海へダイブ。
さっきのページを良く見ると、GetRuntimeReader 関数で、typeof(クラス名).AssemblyQualifiedName なんて、返してやがる。その案、頂き!
とりあえず、これで、万事問題なく動作を確認。
ちなみに、GetRuntimeReader 関数の引数に、ターゲットプラットフォームが入ってくるので、両対応の場合はそれでリーダーを変えられる模様。