アクツクMV：オブジェクトをロックする機能を使って選択肢をつくる


アクツクMVには「オブジェクトをロックする」というアクションが用意されています。ゲーム作成ツールに「オブジェクトをロックする」機能があるっていうのは珍しいと思います。私自身、まだ活用できてはいるとはいえませんが、おそらく使い出のある機能であり、アクツクの一つの特徴といっても良いのではないかと思います。
というわけで、
今回は、この「オブジェクトをロックする」機能を使って、選択肢選択を作ってみようと思います。
(注：画像の説明に「スクリプト」と書いてありますが、今回はスクリプトは使いません。アクションだけでできます）

手順を先に簡単に説明しますと、
１．選択肢オブジェクト（白枠）とカーソル（赤枠）をつくる。
２．選択肢（白枠）をシーンに複数配置したときに、配置した「オブジェクト（インスタンス）」に連続した番号を振って、変数「枠番」に格納する。（１番、２番、３番といった背番号をつけるイメージ）
３．カーソル（赤枠）の、選んでいる番号を示す変数「カーソル位置」と同じ「枠番」のオブジェクト（インスタンス）をロックする。
４．ロックしたオブジェクトの座標を、カーソルの座標にコピーする。（カーソルが選択肢のところへ動く）
５．スペースキーを押すと、カーソル位置が変化し、３．を繰り返して、移動する。リターンキーを押すと決定。

といった流れになります。
（２．の連続した番号をつけるところを図にしてみました。↓）
![共通変数ロック説明図 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/79308505-8cee-ebe6-ef92-77b41e1357ce.png)


では実際に作っていきます。

０．スペースキーとリターンキーを登録（別のキーなら不要です）
キーボードのスペースキーとリターンキーを登録して使えるようにします。
プロジェクトの設定を開きます（１）。操作キー設定（２）にして、一番下までスクロールすると、「＋」が出てくるので、押して、キーを追加します（３）。
操作キーの名称を「SPACE」「ENTER」にします（なぜかここだけフォントの色が黒になってい見にくいですが気にしないでください）。
対応するキーボード・マウスのところをクリックして、スペースキーとリターンキーを登録して完了です。

![09Lock00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/ea5ffdcc-c5fd-94e9-4a07-064d0bcfd665.png)


１．選択肢オブジェクト（白枠）とカーソル（赤枠）をつくります。
素材に以下の画像を登録します。名前は「select」で横に８分割してください（使うのは左端の２つだけですけど）。

![select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/351641bb-4386-e584-8cd2-a52c1800dd06.png)

![09Lock01selectPicture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/2ca1b3ae-021e-cf7c-547f-ab1f4c5ada03.png)

アニメーションを設定します。
「選択枠」というアニメーションを作り、上で登録した画像「select」を設定します。
モーションを３つ作ります。
「白枠」は白い枠（左から２番目）、「カーソル」は赤い枠（左から１番目）、「決定」は赤枠と白枠を４フレームずつ交互に３回表示するようにしました。
（画像以外の設定は特に触っていません）
![09Lock02White.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/d83bd206-36a6-93a2-452e-24e172ed39c8.png)
![09Lock02Red.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/8371c3a2-582f-838d-623e-fa1b0021c22f.png)
![09Lock02Flicker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/6fc28095-97ac-303f-5bc6-418ac8845f03.png)

２．選択肢オブジェクト（白枠）の作成
まず、共通変数を設定します。「枠管理」と「選択決定」です。（説明は後でします）
「素材」の「変数」で登録。初期値は０でいいです。
![09Lock03commonV.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/d1442ac1-187c-7d72-ca58-458a6b78cae6.png)

オブジェクト「白枠」を作ります。アニメーションを上で作った「選択枠」にします。（今回グループはプレイヤーグループにしてますが、新たに作った方がよいとおもいます。）
オブジェクト変数として「枠番」をつくります。初期値は０のままでいいです。

アクションは一つだけです。
モーションを「白枠」にします。
実行アクションを２つ登録します。どちらも「スイッチ・変数を変更」です。

１番目のアクションは、共通変数「枠管理」に１を足します。
２番目のアクションは、その共通変数「枠管理」の値を自分自身の変数「枠番」に入れます。

これで、「白枠」オブジェクトが複数配置されると、「白枠」インスタンスが一つ作成される度に、共通変数が増えていき、作成順の番号が各インスタンスの「枠番」に入ることになります。

![09Lock03WhiteMakepng.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/8636e743-2aff-1c4b-11e4-0d7f37cb40b4.png)
![09Lock03WhiteKanri.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/6269fead-1741-418c-46ce-95e85eaaa73c.png)
![09Lock03WhiteWakuban.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/870dafb6-ea47-41ab-6688-e9bd92683824.png)

確認のために、変数「枠番」を表示してみます。「表示と親子関係」から変数を表示する設定をします。
font24は２４ポイントのTrueTypeフォントを設定しています。
![09Lock03WhiteDisplay.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/4075390a-e9ab-8910-d283-16372eef6ddc.png)

試しにシーンに白枠を３個置いてみてください。実行すると以下のようになります。
各白枠オブジェクト（インスタンス）の変数「枠番」に順番が入っていることがわかります。
![09Lock03WhiteTest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/a947fb6a-6034-b183-cbad-9f272caa7aeb.png)

白枠の数を変えても、自動的に順番になります。増やしたり、減らしたりして確認してみてください。

３.カーソルをつくる。
選択肢が作れたので、カーソルをつくります。
白枠と同じ設定で、オブジェクト「選択カーソル」を作成し、変数「カーソル位置」を作ります（初期値は０）。
アクションを作ります。４つあります。

「初期」アクションは、モーションを「カーソル」にして、変数「カーソル位置」に１を入れています。
![09Lock04RedStart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/8b92e45d-8e26-28b1-6298-88a4af992a34.png)

その後は無条件で「カーソル位置決定」に移ります。
やっと本題がでてきました。
オブジェクトをロックします。
「オブジェクトで指定」を「白枠」
「変数を条件に設定」で、「枠番＝自分自身のカーソル位置」にします。

これで、「カーソル位置」の数値と同じ「枠番」の「白枠」がロックされることになります。
![09Lock04RedSelect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/242fdf3f-e764-130a-11ae-f1248fe2a5a0.png)

ロックしたオブジェクトのX座標位置を、選択カーソルのX座標位置にコピーします。
![09Lock04RedX.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/a2a241ad-9c67-8df3-f69b-becb6e74eb40.png)

Y座標についても同様。
ロックを解除します。（解除しないと、がロックできなくなる）

これで、変数「カーソル位置」と同じ値の「枠番」の「白枠」に、選択カーソルが重なることになります。

スペースキーで移動するアクション「移動」を作ります。「SPACE」を押したら「移動」アクションに移り、無条件で「カーソル位置決定」に戻ります。

「移動」では、変数「カーソル位置」に対して、「白枠」の「シーンに配置された同インスタンス数」で割った余りに、１を足すということをしています。
　「シーンに配置された同インスタンス数」というのは、白枠の数です。この数で割った余りにすることで、カーソル位置が白枠の数（選択肢の最大値）になったら、ゼロにすることが出来ます。それに１を足すので、選択肢の最大値のときスペースを押したら１、それ以外は普通に１を足された値が「カーソル位置」に入ることになります。

「カーソル位置決定」アクションから「決定」へは、「ENTER」を押したら移ります。
ここでは共通変数「選択決定」に「カーソル位置」を代入して、何を選択したかを格納しています。
あとは、モーションを「決定」にして、点滅させ、モーションが完了したら「初期」アクションに戻ります。
![09Lock05deside.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3103492/4ec2f582-10de-6a50-9068-bdf55dc857ae.png)

以上、どこでもいいので、選択カーソルをシーンに配置し、表示優先度を上げて、実行すれば、選択できるようになります。

デモ動画
https://twitter.com/havin_nothin/status/1620455663490174978
白枠の数や位置を変えても、関係なく動きます。

決定後の数値を使って、場合分けしたり、データベースを使う手もあります。
また、変数「枠番」によって、モーションを変えることで、白枠をアイコンにすることも可能と思います。

今回は、共通変数をつかってインスタンスに連番を振り、その番号でロックすることで、選択肢を作ってみました。選択肢だけでなく、いろんな応用ができるテクニックと思います。

ではまた