• VRスクリプティング&VRコンテンツ製作キット。

サブルーチンとマクロとは

tyranoVRでは、何度も繰り返し利用する処理などをライブラリ化して、繰り返し利用する機能があります。
それが、今回利用する「サブルーチン」と「マクロ」です。 この2つは「他のまとまった機能を呼び出す」というところは一緒なのですが、使い方や用途がちがいます。

■サブルーチンの主な用途
・シナリオが大きく分岐する場合など、シナリオファイルを分けて作成しておき、サブルーチンで処理を移動させることでシナリオを分岐させる

■マクロの主な用途
・何度も繰り返し利用するスクリプトをマクロにすることで、タグを記述するだけで繰り返し利用することができるようにする。

いかがでしょう。ちょっと、想像しにくいですね。具体的な使用方法を確認して行きましょう。

【重要】
[jump][button]などでも他のシナリオファイルやラベルに移動することができますが、サブルーチン・マクロと大きくちがう所があります。
それは、サブルーチンとマクロは処理が終わると、呼び出し元に戻ってきます。しかし[jump][button]で移動した場合は呼び出し元に戻って来れません。

サブルーチンの基本的な使い方

サブルーチンは[call]タグを使って呼び出します。また、サブルーチンから呼び出し元に戻る場合は[return]タグを使います。
[wait time=200]
*start
サブルーチンを呼び出します。[p]
[call target=*subroutine]
サブルーチンを呼び出しました。
[s]

*subroutine
これはサブルーチンです。[p]
クリックをすると呼び出し元に戻ります。[p]
[return]

このように、ラベルを起点にサブルーチンを呼び出すことができます。
別のファイルのサブルーチンを呼び出したい場合は、storage属性でファイル名を指定して下さい。


マクロの基本的な使い方

マクロとはある処理をまとめたものを1つのタグで呼び出せるようにできる機能です。
つまり、既存のタグや文章を組み合わせて自由に新しいタグを定義することができる、非常に強力な機能です。
何度も使用するタグはマクロ化しておけば、他のゲームを作る際にも再利用できますので、どんどんマクロ化していきましょう

マクロは一度定義しておけば、そのマクロをどこからでも利用することができるようになります。
なので、必ずゲーム起動時に実行される必要があるため、first.ksの最初に記述しておくのが良いでしょう。


では具体的にコードを見ていきましょう。
シナリオを進める場合、クリック待ちの[p][wait ]を一緒に定義するマクロをつくります。
以下のようなマクロを定義してみましょう。 ; -- マクロの定義 --

[macro name=mymacro]
[p] [wait time=1000 ]
[endmacro]

;マクロを呼び出す
テストテスト[mymacro]
これもテスト[mymacro]

マクロに数値を渡す

ティラノスクリプトでは、定義したマクロを呼び出す際に好きな値を渡すことができます。
以下の例も見て下さい
; -- マクロの定義 --
[macro name=newtag]
[msgopt color=%iro]
[endmacro]

; -- マクロを使う --
[newtag iro=0x00ff00]

この例では定義した[newtag]というタグを呼び出す際にiroという属性と値を渡しています。
それを受け取った側は、%iroとすることで、値を渡しています。

さらに、マクロの中の属性に * (アスタリスク)を指定すると、マクロに渡された属性を全て渡すことができます。
例えば、
[macro name="mymacro"]
[msgopt *]
[wt]
[endmacro]

としておくことで[mymacro] マクロに渡した属性をすべて、msgoptタグに渡すことができます



さらに、値が省略されたときに、デフォルトの値を指定したい場合は、% 付きの属性に、 | ( 縦棒 ) を書き、そのあとに省略された場合の値を指定します。 [macro name=newtag]
[msgopt color=%color|0xff0000]
こんな風にマクロを作ります[p]
[endmacro]

この場合、マクロ呼び出し時にcolorという属性が指定されていなかった場合、|の後の数値がデフォルト値として採用されます。


また、マクロに渡された属性は、変数として利用することもできます。以下のコードを見て下さい。 [macro name="test"]
マクロにわたされた値は「[emb exp="mp.your_name"]」です。[p]
[endmacro]

;マクロの呼び出し
[test your_name="シケモク"]

以上のコードを実行すると
マクロにわたされた値は「[emb exp="mp.your_name"]」です。
と表示されます。

マクロの中ではmp.your_nameというローカル変数が利用できます。
この変数はマクロの中だけで有効なのでご注意下さい

いかがだったでしょうか。マクロを上手く使えば、大幅にゲーム開発を楽にすることができますね。