randomize

2014/09/12

Arma3スクリプティング講座その2:スクリプトの基本

さっそく第二弾。

次のスクリプトを適当なAIのInitializationに入力してください。
this setPos (getPos player)
結果はこんな感じになると思います。
さて、ここで出てきた新しいスクリプト。setPosはユニットと座標を渡すと、ユニットをその座標にワープさせます。getPosはユニットを渡すと座標を返してきます。そしてplayerは文字通りプレイヤーが操作しているユニットを返してくれます。
つまり、こういうことです。getPos playerでプレイヤーの位置する座標を取得します。その座標はsetPosに直接渡されて、ユニットはプレイヤーの座標にワープしてきます。
ちなみに、ここで言う座標は中身のデータが3つある配列の事を指します。配列は[]でくくられます。
座標のデータが3つと聞いて、カンのいい人は気が付くと思いますが、座標のデータは[X軸,Y軸,Z軸]のように格納されています。X軸が東方向、Y軸が北方向、Z軸が縦方向、[0,0,0]はマップ上で言えば左下です。また、配列はselectというスクリプトで一つのデータを取り出すことが出来ます。

ここからさらに発展しますが、飛んでいるヘリのInitialization欄に
hint str ((getPos vehicle this) select 2)
と入力してください。たぶん48とか表示されると思います。ここでたくさん新しいスクリプトが出てきて右も左も分からなくなるかもしれませんが落ち着いてください。スクリプトは一つ一つごく単純なものの集まりなんです。
まず、strとは何かを渡すとそれを文字列にしてくれるスクリプトです。つまり、
str (2+3)
と入力すると数字の5…ではなく文字列の"5"が返ってきます。hintスクリプトは数字などは対応していないので、文字列に変換する必要があるときはstr等を使用しましょう。
次にvehicleですが、これはユニットを渡すとユニットが乗っている乗り物を返してくれます。乗り物に乗っていなかったらユニットをそのまま返してくれます。乗り物に乗っているユニットをさしてユニットをそのまま渡すと挙動がちょっと変になってしまうので、vehicleをはさんでいます。

そしてこのスクリプトの構造はこうです。一番最初に処理されるのは(getPos vehicle this)です。
次に処理されるのはselect 2です。select 2にgetPos vehicle thisを入力することで取得した座標配列の2番目のデータ、つまりZ軸、縦方向のデータを取り出します。
そして、その取り出したデータをstrに入力して、文字列に変換します。変換した文字列をhintに渡します。すると、右上にデータが表示される、ということです。

【実習】次のスクリプトを見て、どのような挙動を示すか自分で考えた後、適当なユニットに実行してみる。考えた挙動と実際に挙動が違っていた場合、スクリプトを良く見直して考え直す。
this setPos[getPos this select 0,getPos this select 1,10]
答え合わせは次回。

 

2 件のコメント :

  1. 初めまして!現在POLPOXさんのエディット教室を参考にしながらOperation Flash Point(ARMA CWA)でエディットを勉強しているものです。
    質問なのですが、本記事中の例題である

    hint str ((getPos vehicle this) select 2)

    を記入したところ、"Unknown operator"というエラーが表示されてしまいました。
    これはどうしてでしょうか?
    急に質問をしてしまい申し訳ありません。

    返信削除
    返信
    1. OFPとは珍しい。strはArmaより追加された命令なのでOFPにはありません。代わりにformatを使いましょう。
      hint format ["%1",((getPos vehicle this) select 2)]

      削除

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