DXライブラリ+Live2D Cubism 4 SDK for Native
さて、ようやく本題に入れる。
2019/10/19追記
この記事を書いた段階では、公開されていたDXライブラリのが3.21で
3.21とLive2D Cubism 4 SDK for Nativeについて書いてるので
3.21では使えないという結論を書いてますが、
2019/10/06に公開された3.21b以降では使えるようになってます。
Live2D Cubism 4 SDK for Nativeを
DXライブラリの3.21で使えるか?
結論から言うと、
2019/08/26に公開された3.21では使えなかった。
でも、DXライブラリの掲示板「live2dについて」
No.21にある3.21aでは使えた。
今後、正式公開される3.21b以降では使えると思う。
2019/10/06に公開された3.21b以降では使えるようになってます。
ソースは、最後に載せることにして、順を追って書いていこう。
DXLib3.21だとアクセス違反が発生
Live2D Cubism 4 SDK for Native+DXライブラリ3.21だと
Live2D_LoadModelのところでアクセス違反の例外が発生した。
「live2dについて」のNo.9にある
Live2D Cubism SDKを
DXライブラリから使うサンプルプログラムには無かったけど、
リファレンスには、
Live2D_LoadModelの前に必要な
Live2D_SetCubism3CoreDLLPathの戻り値があるようだったので
戻り値を確認してみた。
が、戻り値は、正常である。
これは
Live2D Cubism 3 SDK for Nativeと
Live2D Cubism 4 SDK for NativeのDLL名が同じだからかな。
で、「live2dについて」にLive2D_LoadModelの行で例外が発生してしまう
と書いてあったのを思い出し、見てみた。
ただ、その解決をしたモジュールは3.21の公開前の日付だから
3.21では、解決しているはず…
でも、さらに見ていくと
3.21の公開日より後の日付で
Live2D_Model_SetParameterValueという関数が追加されていた。
DXライブラリの3.21と3.21aの差分は、
この関数だけなのかな?
と思い、DXライブラリの3.21と3.21aのソースを比較してみた。
3.21と3.21aのソースを比較
3.21のソースには下記のソースがあった。
DxLive2DCubism3.cpp
DxLive2DCubism3.h
それが3.21aでは、無くなってて
DxLive2DCubism4.cpp
DxLive2DCubism4.h
になってるのに気づいた。
2019/09/04に公開されたLive2D Cubism 4 SDK for Nativeに
対応してそうなファイル名になってる!
3.21aのDXLib.hを見ると
Live2D_SetCubism3CoreDLLPathだけではなく
Live2D_SetCubism4CoreDLLPathというのもある。
ということは、3.21aのlibファイルに入れ替えて
Live2D_SetCubism4CoreDLLPathを使ったらイケる?
試してみたらイケた!(・∀・)
動画を再生するには、videoタグをサポートしたブラウザが必要です。
Live2D Cubism 4 SDK for Nativeを
F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1
として展開した前提のソースは、こんな感じ
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int ModelHandle;
int DllPathRet;
// ウィンドウモードで起動
ChangeWindowMode(TRUE);
// 画面解像度を設定
//SetGraphMode(1900, 900, 32);
SetGraphMode(480*2, 272 * 2, 32);
// Live2D Cubism Core DLL の読み込み( 64bit アプリの場合と 32bit アプリの場合で読み込む dll を変更 )
#ifdef _WIN64
DllPathRet = Live2D_SetCubism4CoreDLLPath("F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1/Core/dll/windows/x86_64/Live2DCubismCore.dll");
#else
DllPathRet = Live2D_SetCubism4CoreDLLPath("F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1/Core/dll/windows/x86/Live2DCubismCore.dll");
#endif
if (DllPathRet < 0) {
MessageBox(NULL, "Live2D Cubism Core DLL の読み込み NG", "えらー", MB_OK);
return(-1);
}
// DXライブラリ初期化処理
if (DxLib_Init() == -1)
{
return -1;
}
// Live2Dモデルの読み込み( model3.json ファイルを指定する )
ModelHandle = Live2D_LoadModel("F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1/Samples/Res/Haru/Haru.model3.json");
if (ModelHandle < 0) {
MessageBox(NULL, "Live2Dモデルの読み込み NG", "えらー", MB_OK);
return(-1);
}
// 描画先を裏画面に変更
SetDrawScreen(DX_SCREEN_BACK);
// メインループ
while (ProcessMessage() == 0)
{
int iRet = 0;
// 画面の初期化
ClearDrawScreen();
DrawString(50, 50, "まだ正式公開されていない", GetColor(255, 255, 255));
DrawString(50, 70, "DXライブラリ置き場掲示板", GetColor(255, 255, 255));
DrawString(50, 90, "トピックス「live2dについて」の", GetColor(255, 255, 255));
DrawString(50, 110, "No.21にある暫定バージョンで", GetColor(255, 255, 255));
DrawString(50, 130, "Live2D Cubism 4 SDK for Nativeのテスト", GetColor(255, 255, 255));
// スペースキーを押したらアイドリングモーションをランダムで再生
if (GetInputChar(TRUE) == ' ')
{
iRet = Live2D_Model_StartMotion(ModelHandle, "Idle", GetRand(1));
if (iRet < 0) {
MessageBox(NULL, "Idle ランダム", "えらー", MB_OK);
return(-1);
}
}
// テンキーの0~3を押すとTapBodyの各モーションを再生
if (CheckHitKey(KEY_INPUT_NUMPAD0) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 0);
if (iRet < 0) {
MessageBox(NULL, "TapBody 0", "えらー", MB_OK);
return(-1);
}
}
if (CheckHitKey(KEY_INPUT_NUMPAD1) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 1);
if (iRet < 0) {
MessageBox(NULL, "TapBody 1", "えらー", MB_OK);
return(-1);
}
}
if (CheckHitKey(KEY_INPUT_NUMPAD2) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 2);
if (iRet < 0) {
MessageBox(NULL, "TapBody 2", "えらー", MB_OK);
return(-1);
}
}
if (CheckHitKey(KEY_INPUT_NUMPAD3) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 3);
if (iRet < 0) {
MessageBox(NULL, "TapBody 3", "えらー", MB_OK);
return(-1);
}
}
// テンキーの4~7を押すと指定された表情を再生
if (CheckHitKey(KEY_INPUT_NUMPAD4) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f04");
if (iRet < 0) {
MessageBox(NULL, "f04", "えらー", MB_OK);
return(-1);
}
}
if (CheckHitKey(KEY_INPUT_NUMPAD5) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f05");
if (iRet < 0) {
MessageBox(NULL, "f05", "えらー", MB_OK);
return(-1);
}
}
if (CheckHitKey(KEY_INPUT_NUMPAD6) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f06");
if (iRet < 0) {
MessageBox(NULL, "f06", "えらー", MB_OK);
return(-1);
}
}
if (CheckHitKey(KEY_INPUT_NUMPAD7) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f07");
if (iRet < 0) {
MessageBox(NULL, "f07", "えらー", MB_OK);
return(-1);
}
}
// モデルの状態を60分の1秒分進める
Live2D_Model_Update(ModelHandle, 1 / 60.0f);
// Live2D描画の開始
Live2D_RenderBegin();
// モデルの描画
Live2D_Model_Draw(ModelHandle);
// Live2D描画の終了
Live2D_RenderEnd();
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// Live2D モデルの削除
Live2D_DeleteModel(ModelHandle);
// DXライブラリ使用の終了処理
DxLib_End();
// ソフトの終了
return 0;
}
※表情のところの「f04」とか「f05」が何かについては、次の記事に書きます。
2019/11/26追記
次の記事を書くの遅れています…
残件として認識をしてるので、書く予定はしています。
書いた際は、このページからのリンクを張ります。
Live2D Cubism 4の使い方を覚えるならこの本
エムディエヌコーポレーション(MdN) (2019/9/10)
商品ページはコチラ↓
【Amazon.co.jp 限定】の書籍には(特典:Live2D Cubism 4 〈年間プラン契約 500円引きクーポン〉データ配信) がついています。
コメント
このブログの新着コメントをRSSリーダに登録する為のxml