#スクリプトきほんのき
MMDAgentのスクリプトは、
1 31 RECOG_EVENT_STOP|こんにちは SYNTH_START|mei|mei_voice_normal|こんにちは。
のように、
数字1 数字2 ほげほげ1(イベント) ほげほげ2(アクション)
となっています。ざっくり言うと、
数字1の状態のときにほげほげ1というイベントが起こったら、数字2と同じ数字のところに遷移してね!
んでもってほげほげ2も実行しといてちょーだいな。
って感じです。
#メイちゃんとおしゃべり(きほん)
1 31 RECOG_EVENT_STOP|こんにちは SYNTH_START|mei|mei_voice_normal|こんにちは。
31 2 SYNTH_EVENT_STOP|mei <eps>
きほんのおしゃべりはこんな感じ。
まず、1行目と2行目の最初の1という数字
これは、音声認識待機状態みたいなものです(たぶん)
メイちゃんが待機している状態の時に、「こんにちは(わ)」を認識すると、認識が終了します。
RECOG_EVENT_STOP|こんにちは(わ)
というイベントが起こったら、31に遷移してね。
SYNTH_START|mei|mei_voice_normal|こんにちは。
をやってね!と書いてあるわけです。
さて、31に遷移しました。
SYNTH_EVENT_STOP|mei
合成が終了したら、2に遷移してね。
4項目目(ほげほげ2に当たる部分)の<eps>は、何もしないということです。
2に遷移すると、fstの上の部分に書かれているのですが、
音声認識、タイマーイベントなどがスタートし(つまるところ待機状態が再開)
状態1に遷移、喋りかけられるの待つことになります。
#メイちゃんとおしゃべり(モーションがついたよ!)
fstにサンプルとして書かれている「こんにちは」を例にします。
1 31 RECOG_EVENT_STOP|こんにちは SYNTH_START|mei|mei_voice_normal|こんにちは。
1 31 RECOG_EVENT_STOP|こんにちわ SYNTH_START|mei|mei_voice_normal|こんにちは。
31 32 <eps> MOTION_ADD|mei|action|モーションファイル|PART|ONCE
32 2 SYNTH_EVENT_STOP|mei <eps>
音声を認識が終了し、31に遷移するところまではさっきと一緒。
31に遷移すると、おや、3項目目(ほげほげ1)には<eps>と書かれています。
遷移条件を指定したくない場合は3項目目を<eps>にします。
そうすると
SYNTH_START|mei|mei_voice_normal|こんにちは。
MOTION_ADD|mei|action|モーションファイル|PART|ONCE
の2つのアクションが同時に起こります。
そこからはさっきと同じ。
こんにちはを認識し、認識終了したところで、32に遷移することになるので、
音声合成が終了したら、2に遷移、待機状態に戻ります。
##Tips
1 31 イベント アクション
という行が二行ありますよね。
これは、「こんにちは」か「こんにちわ」を認識したら、31に遷移してね。ということです。
1 31 RECOG_EVENT_STOP|こんにちは SYNTH_START|mei|mei_voice_normal|こんにちは。
31 32 <eps> MOTION_ADD|mei|action|モーションファイル|PART|ONCE
1 41 RECOG_EVENT_STOP|こんにちわ SYNTH_START|mei|mei_voice_normal|こんにちは。
41 42 <eps> MOTION_ADD|mei|action|モーションファイル|PART|ONCE
の様にわけて書いてもいいんだろうけど、
どうせ遷移先で同じアクションを行うんだから、まとめたほうがスマートだよね。