表情の設定(旧バージョン)
今後は非推奨です。
古いバージョン専用の読み込みメソッドが用意されているのでそれを使います。
表情名をキーにしたハッシュマップの形式で取得できます。
使用例
実際の利用は、以下のような擬似コードになります。
擬似コード内で使用している表情用のJSONファイルは、こちらを想定しております。
-----表情用jsonファイルのロード------------------------------------------------------------------------------
String path = "//live2d/model/expression.json"; // ・・・[1]
InputStream in = Context.getAssets().open(path); // ・・・[1]
byte[] buf = UtFile.load( in ) ; // ・・・[1]
Value mo = Json.parseFromBytes( buf ) ; // ・・・[1]
Value defaultExpr = mo.get("DEFAULT") ; // ・・・[2]
[1]: 表情用に用意した JSON ファイルをロードします。
[2]: 表情変化の相対値の基準となるパラメータの値を指定します。
-----相対値の基準となる値の設定------------------------------------------------------------------------------
HashMap<String, AMotion> expressions = new HashMap<String, AMotion>() ;
Set<String> keys = mo.keySet() ; // ・・・[1]
for(String key : keys) // ・・・[2]
{
if( EXPRESSION_DEFAULT.equals( key ) ) continue ; //飛ばす
Value expr = mo.get( key ) ; // ・・・[3]
AMotion exMotion = new AMotion();
exMotion.setFadeIn( expr.get("FADE_IN").toInt(1000) ) ; // ・・・[4]
exMotion.setFadeOut( expr.get("FADE_OUT").toInt(1000) ) ; // ・・・[4]
//--- IDリストを生成
Value defaultParams = defaultExpr.get("PARAMS") ; // ・・・[5]
Value params = expr.get("PARAMS") ; // ・・・[5]
Set<String> paramID = params.keySet() ; // ・・・[5]
ArrayList<String> idList = new ArrayList<String>() ; // ・・・[5]
for(String id : paramID)
{
idList.add( id ) ;
}
//--------- パラメータの値を設定 ---------
float[] values = new float[ idList.size() ] ;
for ( int i = idList.size() -1 ; i >= 0 ; --i ) // ・・・[6]
{
String id = idList.get(i) ; // ・・・[6]
float defaultV = defaultParams.get(id).toFloat(0) ; // ・・・[6]
float v = params.get( id ).toFloat( 0.0f ) ; // ・・・[6]
values[i] = ( v - defaultV ) ; // ・・・[6]
}
expressions.put( key , exMotion ) ; // ・・・[6]
}
[1]: JSON ファイルのデータを、各要素を指定して取り出せるよう Set 型の変数に代入します。
[2]: ロードした JSON ファイルのデータを、表情のモーションとして読み込めるようにします。
[3]: JSON ファイルに設定されている表情を取得します。
SDK サンプルの中では、A~Hまでをモーションとして生成します。
[4]: JSON ファイルに設定された数値で、フェードにかける時間を設定します。
[5]: JSON ファイル内の "PARAMS" 内で設定されたパラメータ用の数値を読み込みます。
[6]: [5] で設定した値を、モデルの表情のパラメータとして設定します。
@Override
public void updateParamExe( // ・・・[1]
ALive2DModel model,
long timeMSec,
float weight,
MotionQueueEnt motionQueueEnt)
{
for ( int i = idList.size() -1 ; i >= 0 ; --i )
{
String id = idList.get(i) ;
model.addToParamFloat( id, values[i] , weight ) ; // ・・・[2]
}
}
[1]: AMotionクラスのメソッドです。
ここでは、AMotion クラスを継承したクラスからオーバーライドして使用しています。
updateParamExe() メソッドの詳細は こちら を参照してください。
[2]: 表情のパラメータを、現在の数値から相対変化させています。
values は、「相対値の基準となる値の設定」で使用したものと同じ変数です。
addToParamFloat() メソッドの詳細は、「モデルのパラメータを変える」を参照してください。
-----表情の設定----------------------------------------------------------------------------------------------
String expressionID = "A";
L2DMotionManager expressionManager = new L2DMotionManager(); // ・・・[1]
AMotion motion = expressions.get(expressionID); // ・・・[2]
expressionManager.startMotion(motion,false); // 表情を設定
expressionManager.updateParam(live2DModel); // パラメータの更新(相対変化)
[1]: 表情用のモーションマネージャーを用意します。
[2]: JSON ファイルから読み込んだ表情の中から、モデルに反映させる表情を指定します。