2008/9/10 Na-7
2010/1/22 Na-7
XNA2.0でUVアニメーション(テクスチャ差し替えアニメーション)
注意:この資料はUVアニメーションではなく、テクスチャ差し替えアニメーションです。
(UVアニメーションはこちら)
注意 | この資料は、筆者が自らの経験を記録したものであり、他人に勧めるものではありません。 この資料を参考として行った行為がいかなる結果になろうとも、筆者は責任を負いませんので予めご承知おきください。 |
◎使用ツール
ツール名 | 入手元 |
XNA2.0(XNA GameStudio 2.0:ゲーム開発用フレームワーク) | http://msdn.microsoft.com/ja-jp/xna/default.aspx |
ACL(Animation Component Library:アニメーション再生用ライブラリ) |
http://www.codeplex.com/animationcomponents/Thread/View.aspx?ThreadId=19730 XNA2.0用の公式版は存在しないため、上記Discussionsに記載されている http://www.laterminal.net/xna/AnimationComponentDLL.rarを使用した |
ペイント | Windows標準添付 |
◎全体の流れ
1.「XNA2.0でモーションブレンディング」で作成したXNA2.0プロジェクトを用意する。
3.2.で作成した2D画像ファイルをXNAプロジェクトに取り込む。
4.XNAプロジェクトにUVアニメーションコードを記述する。
◎「2.2Dアニメーション画像を作成する。」の手順例
1.「.xファイル」とセットで用意された画像ファイル(.bmpなど)をコピーして複数個作成する。
2.「ペイント(Windows標準添付)」等で画像ファイルを編集し、アニメーション画像を作成する。
サンプル画像:RokDeBone2サンプルデータ用まばたき画像ファイル
◎「3.2.で作成した2D画像ファイルをXNAプロジェクトに取り込む。」の詳細手順
1.ソリューションエクスプローラのプロジェクト名-Contentで右クリック→「追加」→「既存の項目」
2.「既存項目の追加」ダイアログで画像ファイルを選択し「追加」(複数まとめて登録可能)
◎「4.XNAプロジェクトにUVアニメーションコードを記述する。」の手順例
1.Game1クラスの宣言部に以下のコードを追加する。
// UVアニメーション用画像の宣言
2.LoadContent()内に以下のコードを追加する。
//
3.Draw()内に記述されている以下のコードを変更する。
変更前:
// 3Dモデルのレンダリング
animator.World = world;
foreach
(ModelMesh mesh
in testModel.Meshes)
{
//
エフェクト設定
foreach (Effect
effect in
mesh.Effects)
{
BasicPaletteEffect
ef = (BasicPaletteEffect)effect;
// ビュー座標変換指定
ef.Parameters["View"].SetValue(view);
// 射影変換指定
ef.Parameters["Projection"].SetValue(projection);
// ワールド座標変換指定
ef.Parameters["World"].SetValue(world);
// ライティング(オン)
ef.EnableDefaultLighting();
}
}
変更後:
// UVアニメーション用
uvTimer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
if
(uvTimer < uvTimerEnd)
{
if (uvTimer < 180)
// 目を閉じる
uvNumber = (int)MathHelper.Clamp((uvTimer
/ 30), 0f, 5f);
else
// 目を開ける
uvNumber = 11 -
(int)MathHelper.Clamp((uvTimer
/ 20), 6f, 11f);
}
else
{
uvTimer = 0;
uvTimerEnd = 3000;
}
// 3Dモデルのレンダリング
animator.World = world;
foreach
(ModelMesh mesh
in testModel.Meshes)
{
//
エフェクト設定
foreach (Effect
effect in
mesh.Effects)
{
BasicPaletteEffect
ef = (BasicPaletteEffect)effect;
// テクスチャ指定
ef.Parameters["BasicTexture"].SetValue(bbsTexture[uvNumber]);
// ビュー座標変換指定
ef.Parameters["View"].SetValue(view);
// 射影変換指定
ef.Parameters["Projection"].SetValue(projection);
// ワールド座標変換指定
ef.Parameters["World"].SetValue(world);
// ライティング(オン)
ef.EnableDefaultLighting();
}
}
4.実行すると、UVアニメーションが描画される。
・割り算の分母の値を変更すると、UVアニメーション速度を調整可能。