「MonoGameで外部のXNBファイルを読み込む」の版間の差分

ページの作成:「MonoGameで作っているゲームに起動時データ更新を実装し、プログラム以外の画像や音楽などだけであれば自動更新する...」
 
imported>Administrator
編集の要約なし
 
(3人の利用者による、間の4版が非表示)
1行目: 1行目:
[[MonoGame]]で作っている[[ゲーム]]に起動時データ更新を実装し、[[プログラム]]以外の画像や音楽などだけであれば自動更新するようにしたいわけだ。
[[MonoGame]]で作っている[[ゲーム]]に起動時データ更新を実装し、[[プログラム]]以外の画像や音楽などだけであれば自動更新するようにしたいわけだ。[[スマホ]]の[[ゲーム]]によくあるアレである。むしろ[[プログラム]]の細かい部分も[[NeoLua]]に投げるようにしてしまいたい。
むしろ[[プログラム]]の細かい部分も[[NLua]]に投げるようにしてしまいたい。


そうなると外部から各種[[データ]]を読み込む必要が出てくる。
そうなると外部から各種[[データ]]を読み込む必要が出てくる。しかし[[MonoGame]]で扱う各種[[データ]]の基本は[[プログラム]]に組み込まれた「Content」である。
しかしMonoGameで扱う各種データの基本はプログラムに組み込まれた「Content」である。


==Xamarin.Android==
== Xamarin.Android ==
[[MonoGame]]のContentManagerクラスの[[ソースコード]]をざっと見た感じ、[[Xamarin.Android]]ではアセット以外の[[ファイル]]へはアクセスできないようだ。
[[MonoGame]][[ソースコード]]をざっと見た感じ、[[Xamarin.Android]]ではContentManagerクラスでアセット以外の[[ファイル]]へはアクセスできないようだ。ContentManagerクラスの[[ソースコード]]をみると幸いにもvirtualやらがチラホラ見受けられ継承してoverrideする前提の構造になっている。なので細かいことは考えずにoverrideしてしまえと考えた。
ContentManagerクラスの[[ソースコード]]をみると幸いにもvirtualやらがチラホラ見受けられ継承してoverrideする前提の構造になっている。
なので細かいことは考えずにoverrideしてしまえ。


ついでに各種パラメータを保存した[[csv]]や[[json]]などのxnb以外の[[ファイル]]も同様の手順で読み込めるように、xnbパーサを経由しない裏口も用意すると捗った。
ついでに各種パラメータを保存した[[csv]]や[[json]]などのxnb以外の[[ファイル]]も同様の手順で読み込めるように、xnbパーサを経由しない裏口も用意すると捗った。
個人的な主な用途としては、[[OpenGL ES]]の[[バーテックスシェーダー]]は書き込みだけで読み出せないため、[[モデル]]とは別に頂点データのcsvファイルを読み込み、それを当たり判定に用いている。


<source lang="csharp">
<source lang="csharp">
61行目: 56行目:
             }
             }


            // This is primarily for editor support.
            // Setting the RootDirectory to an absolute path is useful in editor
            // situations, but TitleContainer can ONLY be passed relative paths.               
             stream = File.OpenRead(path);                 
             stream = File.OpenRead(path);                 


92行目: 84行目:


使い方は普通のContentManagerと大して変わらない。
使い方は普通のContentManagerと大して変わらない。
<source>
<source lang="csharp">
// Androidであれば「/data/data/アプリID/files」あたりが返ってくるはず。
// Androidであれば「/data/data/アプリID/files」あたりが返ってくるはず。
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var rootdir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var cm = new ExternalContentManager(this.Content.ServiceProvider, path);
var cm = new ExternalContentManager(this.Content.ServiceProvider, rootdir);
var font = cm.Load<SpriteFont>("IPA-Gothic");
var font = cm.Load<SpriteFont>("IPA-Gothic");
</source>
</source>


==関連項目==
== 関連項目 ==
*[[MonoGame]]
* [[MacOS版のMonoGameのPipeline.appで3Dモデルをビルドできない]]
* [[MonoGameで使う3DモデルをFusion360で作成する]]
* [[MonoGameのカメラを作る]]


[[category:MonoGame]]
[[category:MonoGame]]
[[category:Xamarin.Android]]
[[category:Xamarin.Android]]