VRM4 スクリプト講座 -イベント編-
この章で主に扱うスクリプト
SetEventTime 参照オブジェクト, メソッド, グローバル変数, 時間 SetEventTimer 参照オブジェクト, メソッド, グローバル変数, 時間 SetEventKey 参照オブジェクト, メソッド, グローバル変数, キー SetEventSensor メソッド, グローバル変数 Var 変数名 //使用する変数とその名前を宣言する DrawMessage "文字" //ログウインドウに文字を表示する DrawVar 変数名 //変数の値をログウインドウに表示する set 変数A, 数値 //代入 A = 数値(変数も可能) add 変数A, 変数B //加算 A = A + B sub 変数A, 変数B //減算 A = A - B
教材
以下のレイアウトをダウンロードして使用します。
0号か4号~最新号のいずれかが必要です。
ストラクチャと編成はお好みに合わせてご使用ください。
スクリプトを任意のタイミングで実行させるには実行させる瞬間を定める条件が必要です。これらの条件は次の三種類に分類できます。
- ある時間が経ったとき
- キーが押されたとき
- センサーに編成が触れたとき
一見複雑な開始条件でもこの3種類を組み合わせることで実行できます。
演習
1-1. SetEventTime & SetEventTimer
まずは「時間」による操作です。
時間による操作を設定するコードは「SetEventTime」と「SetEventTimer」の二種類があります。「SetEventTime」は「指定した時間にイベントを発生させる」もので一回きりの入力を作るときに使用します。「SetEventTimer」は「指定した時間毎にイベントを発生させる」もので、入力したイベントを繰り返し行います。以下がサンプルコードです。編成かセンサーに以下のスクリプトをコピー&ペーストしてみてください。ビュワーを起動すると5秒後に Event1 が実行され、2秒毎に Event2 が実行されます。
またサンプルの確認できれば一度終了し、「2000」や「5000」の数字を変化させて見ましょう。「SetEventTimer」の方の数字を小さくするとログの数字がものすごい勢いで増加します。
//編成かセンサーにコピペする Var aa Var bb Var count // Event2 が何回実行されたか数えてる変数 SetEventTime this Event1 aa 5000 //起動して5.0秒後に Event1 を実行 SetEventTimer this Event2 bb 2000 //起動して2.0秒毎に Event2 を実行 BeginFunc Event1 DrawMessage "SetEventTime 実行!" EndFunc BeginFunc Event2 add count 1 // Event2 が実行されるたび count に +1 する DrawMessage "SetEventTimer 実行! (↓回数)" DrawVar count // count に入っている数字を表示 EndFunc
1-2. SetEventKey
次は「キー」入力の処理です。これは指定したキーを押したときにイベントが実行されるものです。以下がサンプルコードです。編成に以下のスクリプトをコピー&ペーストしてみてください。zキーを押すとカウンターが増加します。他のキーにも変えることができるので試してみましょう。
//編成かセンサーにコピペする Var aa Var count // Event が何回実行されたか数えてる変数 set count 100 // count に 100 を代入 SetEventKey this Event aa z // z キーを押すごとに Event を実行 DrawMessage "[ z ] キーを押そう!" //ビュワーが始まるとすぐ表示 BeginFunc Event sub count 1 // Event が実行されるたび count に -1 する DrawMessage "SetEventKey 実行! (↓回数)" DrawVar count // count に入っている数字を表示 EndFunc
1-3. SetEventSensor
三つ目は「センサー」による入力です。
これはイベントを設定したセンサーに編成が触れたとき実行されます。
以下がサンプルコードです。
今回はレイアウトのセンサーに以下のスクリプトをコピー&ペーストしてみてください。
//センサーにコピペする Var aa SetEventSensor Event aa // センサーに触れるごとに Event を実行 DrawMessage "列車をゆっくり発車させてみよう!" BeginFunc Event DrawMessage "SetEventSensor 実行!" EndFunc
1-4. まとめ
全部を一気に書き込んでみます。2-3に使用したセンサーに以下のスクリプトをコピー&ペーストしてみてください。
//センサーにコピペする Var aa Var bb Var cc Var dd SetEventTime this Event1 aa 7000 //起動して7秒後に Event1 を実行 SetEventTimer this Event2 bb 2000 //起動して2秒毎に Event2 を実行 SetEventKey this Event3 cc x // x キーを押すごとに Event3 を実行 SetEventSensor Event4 dd //センサーに触れるごとに Event4 を実行 BeginFunc Event1 DrawMessage "全国の山田さん、ごめんなさい・・・。(笑)" EndFunc BeginFunc Event2 DrawMessage "山田さんサイコー!!" EndFunc BeginFunc Event3 DrawMessage "山田さん、しつこいよ!" EndFunc BeginFunc Event4 DrawMessage "山田さん、列車の旅はどうだい?" EndFunc