コマンドの同時実行

2つ以上のコマンドを同時に動作させるために、TVMLにはwaitという特別なパラメータがあり、これを利用することで同時実行できます。
ただ、TVMLの処理形式はシーケンス(1行処理)を基本としていますので、よく考えてTVMLを書く必要があります。

同時実行の基本

キャラクタAとキャラクタBを同時におじぎ(bow)させる例が次のTVMLです。最初のcharacter: bowをwait=noにすることで、動作のトリガーだけを出して即座に次の行へ移動するようになります 。

charactet: bow(name=A, wait=no)
charactet: bow(name=B)

一行目でAにおじぎのトリガを出してすぐに二行目のBのおじぎが始まるので、結果的にAとBが同時におじぎします。
次の例は、AとBを少し時間差をつけておじぎさせる例です。

*動作をさせるTVMLコマンドにはすべてwaitパラメータがあり、通常は省略されており、デフォルトはwait=yesです。

charactet: bow(name=A, wait=no)
wait(time=0.3)
charactet: bow(name=B)

途中で0.3秒待ちを入れることで、微妙にバラバラっとおじぎします。
次の例は、おじぎしながら「こんにちは」としゃべるスクリプトです。

character:bow( name=A, wait=no)
character:talk( name=A, text=”こんにちは” )

ウェイトアンダーバーコマンド

wait=noで動作させたコマンドが終わるまで待つためのコマンドも用意されており、これをウェイトアンダーバーコマンドと呼びます。
以下がその例です。

character: walk(name=A, x=2.0, z=0.0, wait=no)
character: wait_walk(name=A)
character: talk(name=A, text=”着きました”)

wait=noで歩きはじめ、その後、wait_walkで目的地に達して歩き終わるを待ち、その後、「着きました」としゃべります。
ウェイトアンダーバーコマンドはこのように動作コマンドの名前に”wait_”を付けることで作ることができます。
これを使って、たとえば次のように、いろいろな並列動作を記述することができます。

character: walk(name=A, x=2.0, z=1.0, wait=no)
wait(time=1)
character: look(name=B, target=A)
character: talk(name=B, text=”歩いてるな”)
character: wait_walk(name=A)
character: talk(name=A, text=”着きました”)

このように、walkとwait_walkの間にほかの動作コマンドをいろいろ書くことで、並列動作をするシーンを作れます。