Live2DモデルファイルからパラメータID取得

  • 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

通常、Live2DのパラメータIDはCubism Modelerで確認します
01 2.png

このIDは新規に作ったり編集削除できるので、Live2Dモデルによってバラバラです。
Unity側でモデルファイルからパラメータIDを取得する方法がありました。
APIリファレンスにも書いてないので、デバッグしてたら取れましたw

SimpleModel.cs
// モデル情報からパラメータIDを取得
var paramList = live2DModel.getModelImpl().getParamDefSet().getParamDefFloatList();
foreach (var item in paramList) {
    // モデルのパラメータIDを取得
    Debug.Log(item.getParamID().ToString());
}

これを実行するとこんな感じにパラメータIDが取れます。
今回はStart()の中に入れました。
スクリーンショット 2015-03-13 13.34.53.png

また、パラメータの現在の値をとるには以下のコードで取れます

SimpleModel.cs
foreach(var item in paramList){
    // モデルのパラメータIDを値を取得
    Debug.Log(live2DModel.getParamFloat(item.getParamID().ToString()));
}

エディタ拡張すればモデルをスクリプトにセットするだけで、そのモデルが持ってるパラメータIDも表示できるかと。

あと、描画オブジェクトIDを取得したい場合は以下のコードで取れます。

SimpleModel.cs
var dataList = live2DModel.getModelImpl().getPartsDataList();
foreach (var items in dataList) {
    for (int i = 0; i < items.getDrawData().Count-1; i++) {
        Debug.Log (items.getDrawData()[i].getDrawDataID().ToString());
    }
}

DebugLog1.png

描画オブジェクトの頂点やインデックスを取るなら以下のコードでいけます。

SimpleModel.cs
// 描画オブジェクトIDから描画インデックスを取得
var drawIndex = live2DModel.getDrawDataIndex("D_FACE_001.00");
// 頂点を取得
var points = live2DModel.getTransformedPoints(drawIndex);
Debug.Log ("---------- point_num:" + points.Length + " ----------");
var pointArray = new StringBuilder();
for (int i = 0; i < points.Length; i+=2) {
    pointArray.Append("x:" + points[i] + " y:" + points[i+1] + " ");
}
Debug.Log ("<color=blue>point:" + pointArray + "</color>");

// インデックスを取得
var indices = live2DModel.getIndexArray(drawIndex);
Debug.Log ("---------- index_num:" + indices.Length + "----------");
var indexArray = new StringBuilder();
for (int i = 0; i < indices.Length; i++) {
    indexArray.Append(indices[i] + ", ");
}
Debug.Log ("<color=red>index:" + indexArray + "</color>");

DebugLog2.png

インデックスはStart()でいいけど頂点はOnRenderObject()やUpdate()に入れないと0が返ってきます。
参考:Live2D Document - 頂点インデックスの取得