グローバル変数を用いた連携

グローバル変数を用いた連携 #

MMDAgent-EX はグローバル変数の格納領域を内部に持っており、.fst スクリプト、.mdf 設定ファイル、あるいはメッセージによって値を代入・変更・参照できます。

グローバル変数はキーと値のペア (key-value pair) の集合です。以下、値の代入・参照方法について解説します。

.mdf で代入 #

以下の形で書かれた全てのペアが、key-value 値として起動時にグローバル変数に代入・保持されます。

KeyName=String

あとで設定の値を取り出すことができるほか、設定とは無関係の任意の key-value 値を .mdf 内に書いて定義することもできます。

.fst で参照・代入 #

.fst 内では、任意の場所でグローバル変数を ${%KeyName} の形で値を参照できます。 値は .fst のロード時ではなく、その行を実行するタイミングで評価されます。

以下は MODEL_ADD メッセージの第1引数であるモデルエイリアス名として、グローバル変数のキー値 “ModelName” の値を代入する例です。(.fst での変数の扱いは 解説のページを見てください)

0 LOOP:
    <eps> MODEL_ADD|${%ModelName}|...

以下のように値そのものを条件として用いることも可能です。

LOOP LOOP:
    ${%KeyName}==string SYNTH_START|mei|...

行末の追加フィールドを使って値の代入も行えます。

0 LOOP:
  ...
  <eps>  MODEL_ADD|mei|... ${%KeyName}=string

メッセージで代入 #

KEYVALUE_SET メッセージを発行することで値を代入できます。

KEYVALUE_SET|(key name)|(value)

MODEL_BINDFACE でバインド #

MODEL_BINDFACE メッセージの別の使い方として、モーフを固定値ではなくグローバル変数にバインド(紐付け)することが可能です。バインドが指定されたモーフは、バインド先のグローバル変数の値で制御されるようになり、変数の値が変更されるたびにモーフが合わせてリアルタイムに追従変化します。

これを利用して、「ある特定のモーフの値を .mdf の設定値から与える」、あるいは「外部から KEYVALUE_SET メッセージで値を随時流し込むことで、外部から特定のモーフをリアルタイム制御する」ような使い方ができます。

MODEL_BINDFACE|(key name)|(min)|(max)|(model alias)|(morph name)|rate1|rate2

min, max はグローバル変数の値の最小値と最大値、rate1, rate2 がそれぞれに対応するモーフ値の最小値と最大値です。min 以下の値は rate1に、max以上の値は rate2 にキャップされます。間は線形補間です。図で表すと以下のようになります(横軸がグローバル変数の値、縦軸の1がrate1、2が rate2 の値に対応)。

BindBone

MODEL_UNBINDFACE でバインドを解除できます。

MODEL_UNBINDFACE|(model alias)|(morph name)
comments powered by Disqus