メインメニューを開く

差分

MonoGameで外部のXNBファイルを読み込む

6 バイト追加, 2018年10月26日 (金) 05:23
編集の要約なし
[[MonoGame]]で作っている[[ゲーム]]に起動時データ更新を実装し、[[プログラム]]以外の画像や音楽などだけであれば自動更新するようにしたいわけだ。むしろ[[スマホ]]の[[ゲーム]]によくあるアレである。むしろ[[プログラム]]の細かい部分も[[NLuaNeoLua]]に投げるようにしてしまいたい。
そうなると外部から各種[[データ]]を読み込む必要が出てくる。しかしMonoGameで扱う各種データの基本はプログラムに組み込まれた「Content」である。を読み込む必要が出てくる。しかし[[MonoGame]]で扱う各種[[データ]]の基本は[[プログラム]]に組み込まれた「Content」である。
==Xamarin.Android==[[MonoGame]]のContentManagerクラスの[[ソースコード]]をざっと見た感じ、[[Xamarin.Android]]ではアセット以外のではContentManagerクラスでアセット以外の[[ファイル]]へはアクセスできないようだ。ContentManagerクラスのへはアクセスできないようだ。ContentManagerクラスの[[ソースコード]]をみると幸いにもvirtualやらがチラホラ見受けられ継承してoverrideする前提の構造になっている。なので細かいことは考えずにoverrideしてしまえ。をみると幸いにもvirtualやらがチラホラ見受けられ継承してoverrideする前提の構造になっている。なので細かいことは考えずにoverrideしてしまえと考えた。
ついでに各種パラメータを保存した[[csv]]や[[json]]などのxnb以外の[[ファイル]]も同様の手順で読み込めるように、xnbパーサを経由しない裏口も用意すると捗った。
個人的な主な用途としては、[[OpenGL ES]]の[[バーテックスシェーダー]]は書き込みだけで読み出せないため、[[モデル]]とは別に頂点データのcsvファイルを読み込み、それを当たり判定に用いている。
<source lang="csharp">
使い方は普通のContentManagerと大して変わらない。
<sourcelang="csharp">
// Androidであれば「/data/data/アプリID/files」あたりが返ってくるはず。
var path rootdir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);var cm = new ExternalContentManager(this.Content.ServiceProvider, pathrootdir);
var font = cm.Load<SpriteFont>("IPA-Gothic");
</source>
==関連項目==*[[MonoGameMacOS版のMonoGameのPipeline.appで3Dモデルをビルドできない]]* [[MonoGameで使う3DモデルをFusion360で作成する]]* [[MonoGameのカメラを作る]]
[[category:MonoGame]]
[[category:Xamarin.Android]]
匿名利用者