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プロジェクトを用意する。

2.2Dアニメーション画像を作成する。

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アニメーション用画像の宣言
    Texture2D[] bbsTexture = new Texture2D[6];

    // UVアニメーション用
    int uvNumber = 0; // UVアニメーション番号
    float uvTimer = 0; // 経過時間(ミリ秒)
    float uvTimerEnd = 3000; // 目標時間(ミリ秒)

 

2.LoadContent()内に以下のコードを追加する。

    // UVアニメーション用画像の呼び出し
    for (int i = 1; i < 7; i++)
        bbsTexture[i - 1] = content.Load<
Texture2D>("bbs" + i.ToString());

 

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アニメーション速度を調整可能。
 

inserted by FC2 system