初めまして。お世話になります。
MMDモデル(.pmx)にモーション(.vmd)を付けて動かしたいのですが、足(下半身?)だけが全然動かないという状況に陥っています。
腕と足を外旋するという簡単なモーションでも試しましたが、やはり足だけが動きませんでした。
下半身以外は正常のように見えます。
また、MMDで表示したときのモーションは全身が問題なく動いています。
モデル自体の問題なのかモーションの問題なのか、初心者の私にはお手上げ状態です。
この現象の解決方法などがあればご教示いただけると幸いです。
【使用したMMDモデル】
Sour式初音ミクVer1.02のBlack.pmx
ダウンロードリンク:httpエス://bowlroll.net/file/146103
【コード】
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int ModelHandle, AttachIndex, PlayAnim;
float TotalTime, PlayTime;
// DXライブラリの初期化
if (DxLib_Init() < 0)
{
// エラーが発生したら直ちに終了
return -1;
}
//物理演算オフ
MV1SetLoadModelUsePhysicsMode(DX_LOADMODEL_PHYSICS_DISABLE);
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel("3D/Black.pmx");
MV1SetScale(ModelHandle, VGet(20.0f, 20.0f, 20.0f));
// 描画先を裏画面に変更
SetDrawScreen(DX_SCREEN_BACK);
// 画面に映る位置に3Dモデルを移動
MV1SetPosition(ModelHandle, VGet(320.0f, -300.0f, 600.0f));
//マテリアルの数を取得
int MaterialNum = MV1GetMaterialNum(ModelHandle);
//輪郭線設定
for (int i = 0; i < MaterialNum; i++)
{
FLOAT DotWidth;
DotWidth = MV1GetMaterialOutLineDotWidth(ModelHandle, i);
MV1SetMaterialOutLineDotWidth(ModelHandle, i, 0.01f);
}
// 3Dモデルの0番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim(ModelHandle, 0, -1, FALSE);
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex);
// 再生時間の初期化
PlayTime = 0.0f;
// 再生しているアニメーションを0番にする
PlayAnim = 0;
// アニメーション0の再生が終わるか、何かキーが押されるかウインドウが閉じられるまでループ
while (ProcessMessage() == 0 && CheckHitKeyAll() == 0)
{
// 画面をクリア
ClearDrawScreen();
// 再生時間を進める
PlayTime += 1.0f;
// 再生時間がアニメーションの総再生時間に達したら次のアニメーションにする
if (PlayTime >= TotalTime)
{
// 再生しているアニメーションを、今までが0番だったら1番に、1番だったら0番にする
if (PlayAnim == 0)
{
PlayAnim = 1;
}
else
{
PlayAnim = 0;
}
// 今までアタッチしていたアニメーションのデタッチ
MV1DetachAnim(ModelHandle, AttachIndex);
// 3Dモデルの PlayAnim 番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim(ModelHandle, PlayAnim, -1, FALSE);
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex);
// 再生時間の初期化
PlayTime = 0.0f;
}
// 再生時間をセットする
MV1SetAttachAnimTime(ModelHandle, AttachIndex, PlayTime);
// 3Dモデルの描画
MV1DrawModel(ModelHandle);
// 裏画面の内容を表画面に反映
ScreenFlip();
WaitTimer(50);
}
// モデルハンドルの削除
MV1DeleteModel(ModelHandle);
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}