FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告  page to top

BlenderからXNAへモデルとモーションを その5

今日はBlenderからXNAへモデルとモーションをの第5回目です。2011/7/17にライブラリ公開したため記事を修正しました。

環境は以下の通り。

Blender : 2.57a
XNA : 4.0


さて、前回までで一通りコンテントパイプラインまで書きましたが、今日はライブラリを公開したのでそちらを紹介。今回のライブラリにこれまでやってきたBlenderからXNAへデータを持ち込むためのPipelineの全体(公開していなかったクラス含めて)を実装していますので、気になる方はこちらをどうぞ。


上記のライブラリでは、パイプラインからデータを持ち込むときにタイプライターとタイプリーダーを使用していますが、もっと簡単な方法として自動シリアライズを使うこともできます。ので補足として自動シリアライズについて少し詳しく書いて見ます。

■自動シリアライズについて

さて、まず前回のコンテントパイプラインではコンテント型が登場します。BasicMaterialContentBoneContent等がそうです。自作のMhlModelContentもコンテント型として扱っています。
これらのコンテント型は、あくまでコンテントパイプライン上にしか存在しない型で、実際のゲームではランタイム型に変換される必要があります。
この変換を自動で行ってくれる機能が自動シリアライズです。

自動シリアライズのメリットは、実装が簡単なことです。タイプライターとタイプリーダーを作る手間が省けます。一方のデメリットとして、自動シリアライズではファイル読み込み時にリフレクションを行うため、若干ではありますが処理負荷がかかります。結果としてロード時間が長くなります。
少量の場合は特に気にする必要はないようですが、読み込み時間を短縮したい場合はタイプライターとタイプリーダーを利用したほうが良いようです。

さて、実際にこのシリアライズを行うために最低限必要なコードは以下の3種です。


■ContentSerializerRuntimeType

ContentSerializerRuntimeTypeの記述で、コンテント型がどのランタイム型に変換されるかを規定します。コンテント型のクラス定義の直前に、以下のような形で記述します。

[+]コード
[ContentSerializerRuntimeType( "Namespace.ClassName, AssemblyName" )]
class HogeHoge
{
}


このとき、Namespace.ClassNameはランタイム型のNamespaceとクラス名を記述します。また、AssemblyNameにはランタイム型のクラスが含まれるアセンブリ名(簡単に言えば.exeや.dllの名前)を記述します。


■ContentSerializerとContentSerializerIgnore

この二つは、それぞれコンテント型及びランタイム型の変数がシリアライズされるか否かを規定します。コンテント型とランタイム型のフィールド及びプロパティの直前に、以下のような形で記述します。

[+]コード
// シリアライズするフィールド
[ContentSerializer]
private int test1;
 
// シリアライズしないフィールド
[ContentSerializerIgnore]
private int test2;


なお、publicなフィールドとプロパティは自動的に「ContentSerializer」が、publicではないフィールドとプロパティは自動的に「ContentSerializerIgnore」が定義されたものとして扱われます。


■終わり

さて、実際にコードも公開してしまったので、この記事はここで一旦締めとさせていただきます。 Mhlは適宜更新しようと思います。よかったら使ってみてください。では、サヨナラ、サヨナラ、サヨナラ。
関連記事

Tag:XNA4.0  Trackback:0 comment:0 page to top

Comment

comment form
(編集・削除用):
プロフィール

Nikukyu

Author:Nikukyu
なんちゃってゲーム開発者をしています。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。