アクツクMV：既存のアクションをスクリプトで実行（変数でパラメータを操作する）

アクツクMVは、アクションプログラムを使って、ビジュアルにプログラミングができるようになっています。
いろんなアクションが用意されていて、たいていそれで何とかなるのですが、変数を使ってパラメータを変更したいと思っても、できない場合があります。

たとえば「移動方向を指定して移動」アクション。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/6655a7a3-e110-88c7-cf2c-41090174d442.png)

パラメータはすべて直接、数値で指定するようになっています。
このままでは移動方向や移動距離を、変数でコントロールすることはできません。
変数に角度を入れて、方向を変えたいと思ってもできないのです。

ところが、スクリプトを使えば、簡単に変更することが出来ます。
というわけで、今回はスクリプトでアクションを実行する方法を紹介します。

まず、BazさんのScripting Made Easyのページに行きます。
以下のリンクの中ほどにある「Set Move Direction and Move」のところまでスクロールします。
「Set Move Direction and Move」は、「移動方向を指定して移動」と同じものです。
英語ですが説明があります。

https://steamcommunity.com/sharedfiles/filedetails/?id=2566824894

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/a9f67f6c-157c-9195-22ed-06d6dea7d0ca.png)

四角で囲われたスクリプト部分をコピーして、オブジェクトの「スクリプトを実行」アクションを追加。そこに貼り付けます。
```
(function(){
var args = {
    "direction": 270,
    "directionId": -2,
    "moveDistance": 0,
    "moveDistanceEnabled": false
}
Agtk.objectInstances.get(instanceId).execCommandDirectionMove(args);
})()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/3b80ba71-ad68-6ebe-bba9-4f73fc4fe1a5.png)

（ここでのアニメーションは、単純な三角形を上下逆（▼）にして、表示方向の設定を「回転で自動生成」にしています。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/ce5b4341-72e9-b012-24de-37bb1b42db41.png)

実行すると、オブジェクトが左（２７０度）に向かいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/21a3d2d6-288e-4aa0-9cac-36578359b884.png)

最初のパラメータ、
"direction": 270,
となっているところが、方向の角度（２７０度）です。

ここを書き換えればよいのですが、この場所は変数使うときには使えないので、
下から３行目に、以下の１行を加えます。

args.direction = 90;

これで、２７０度を９０度に変更できます。
~~~
(function(){
var args = {
    "direction": 270,
    "directionId": -2,
    "moveDistance": 0,
    "moveDistanceEnabled": false
}

args.direction = 90; //ここで角度を変更

Agtk.objectInstances.get(instanceId).execCommandDirectionMove(args);
})()
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/fbd3d247-bb14-1cb4-2fbd-d0b53fff5a5d.png)

実行すると、右向きに動くようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/f5da52b4-268c-5446-c26a-1513a53cf730.png)

では、アクツクMVの変数でコントロールできるようにします。
まず、オブジェクトに変数「移動角度」を作成します。初期値は０です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/567b6432-be44-1045-1cd0-72da92008cc1.png)

次に、スクリプトを以下のように変更します。

~~~
(function(){
var args = {
    "direction": 270,
    "directionId": -2,
    "moveDistance": 0,
    "moveDistanceEnabled": false
}

var self = Agtk.objectInstances.get(instanceId); //自分を変数selfへ代入
var dirSelf = self.variables.get(self.variables.getIdByName("移動角度")).getValue(); //移動角度をdirSelfへ代入
args.direction = dirSelf; //ここで角度を変更

Agtk.objectInstances.get(instanceId).execCommandDirectionMove(args);
})()
~~~

下から、４，５行目で変数「移動角度」を取得しています。
これで、オブジェクトの変数「移動角度」に数値をいれると、その角度の方向へ進むようになりました。

どうでしょう。わかってしまえば簡単でしょう？
いろいろ試してみてください。


ではさらに、もうすこし遊んでみます。
「角度変更」という新たなアクションを追加して、無条件にループするようにします。
「角度変更」の中身は、

１．「遷移前のモーションを引き継ぐ」にチェックを入れ（入れないとオブジェクトが消えちゃう）、
２．「スイッチ・変数を変更」で自身のオブジェクト「移動角度」＋＝１０

とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/13d1e52b-2514-4670-2677-b7bd22f94f71.png)

これで、１０度ずつ右に回転していくようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/36bfa424-c585-abc6-4a0f-1d4114c791d2.png)
（動画： https://twitter.com/havin_nothin/status/1641673404263854080 ）

（このままだと移動角度が無限に大きくなるので、【「移動角度」％＝３６０】というアクションを入れた方が、良いと思います）

BazさんのScripting Made Easyのページ
https://steamcommunity.com/sharedfiles/filedetails/?id=2566824894
には、ほかのアクションのスクリプトも載っていますので、同じように

args.＜パラメータ名＞＝変更したい値；

を最後から３行目に挟むことで変更できるようになります。

これで、変数でパラメータ変更したいけど、できなかったアクションも、変更可能にできました。

ではまた。


感謝：
スクリプトで、アクションのパラメータを設定するのに、オブジェクト型のデータを使っています。
それについては、こちらのサイト参考にしました。ありがとうございます。
【JavaScript】オブジェクト型データ操作の基本
https://qiita.com/TeraSan_codewalker/items/acc21ee232a69d76873a