randomize

2014/09/30

Arma3スクリプティング講座その11:Functions

第十一弾。今回はFunctionsはあまり出てこないかも…

さて、前回の答えですが
(1~4の数字) call BIS_fnc_earthQuake ;
でした。できたかな?

では本題。早速何も考えずに、init.sqfに次の文を書いてください。
[] execVM "script.sqf" ;

んん?なんだかエラーが出ましたよ。今出てきたスクリプト、execVMを紐解くところから始めましょう。
execVMとは、ちょっとプログラムを触ったことのある人はティン!と来ると思いますが、要はスクリプト呼び出しコマンドなわけです。この場合、引数[]で"script.sqf"を呼び出そうとしたわけですが、この時点ではscript.sqfは作成されていない…はずなのでエラーが発生する、というわけです。
では、init.sqfのときと同じ要領でscript.sqfを作成し、その中に次の文を書いてください。
hint "script.sqf is running!" ;
どうですか?スクリプトは正常に動いたと思います。要領をつかんだ人は分かると思いますが、スクリプトを呼び出し、動かしてくれます。
では、ここで簡単に実習。先ほど作成したscript.sqfをtest.sqfと改名し、新たに作成したscriptsフォルダの中に入れてください。さあどのように呼び出せばよいでしょうか?

答えは、
[] execVM "scripts\test.sqf" ;
です。基準フォルダはmission.sqmがある場所で、そこからフォルダを進む場合\(バックスラッシュ)で区切ってください。
正しく書いていれば、正しく動くはずです。
さて、そろそろexecVMの前にある空のArrayが気になってくる人もいると思いますが…なんだと思いますか?

この段階では全く意味をなさない適当な引数です。実は、このArray(Array以外も突っ込めますけど)は呼び出したスクリプトの中で引数として使えるんです。
例えば、init.sqfの中身を
["Tom",22] execVM "scripts\test.sqf" ;
とし、test.sqfの中身を
hint format ["%1 is %2 age.",_this select 0,_this select 1] ;
とすると、
と、表示されます。説明のために新しく出てきたformatですが、基本はstrと同じです。例えば、
format ["%1,%2","First","Second"]
の結果は、
First,Second
となる単純なスクリプトです。つまり、Array1番目以降の中身がにArray最初の文字列の中の%1や%2などに置き換えてくれるスクリプトです。

…おほん、話が少しずれましたね。先ほどのhintで気が付いてくれると幸いですが、execVMで呼び出すときに引数に["Tom",22]が入りました。その引数はtest.sqf内で_thisとして扱えます。この場合はArrayなので、一つのデータを取り出すためにselectを使用していますが、execVMの引数はString,Number,Booleanなどさまざまなデータを突っ込めます。
このexecVMとスクリプトを使用すれば、ミッション内のスクリプトをモジュール式に管理することが出来、非常に生産性が高まるほか、整備性が高まります。

【実習】scriptsフォルダ内にgetName.sqfを作成し、中身を次のようなスクリプトにする。
適当にプレイヤーの参加にユニットを配置し、そのユニット全員の名前を2秒おきに読み上げる。なお、ユニットの引数はexecVMとともに書く。グループのユニット全員を取得する際は、unitsスクリプト、名前取得はname
 

0 件のコメント :

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。