【Unity(C#),Bolt】Boltでタイマーの実装

##Bolt
ノードベースのビジュアルスクリプティングツールです。
最近？無料で使えるようになったそうですね。

アセットストアから落としてくれば使えます。

Bolt：[ストアページ](https://assetstore.unity.com/packages/tools/visual-scripting/bolt-163802)

今回はBoltでタイマーを実装しようと思います。

##バージョン情報
Unity　2019.4.8f1
Bolt Version 1.4.13

##下準備
Boltをアセットストアからインポートしたら
`Install Bolt`というフォルダの配下にPackageが配置されます。

2つあるので`Bolt_1_4_13_NET4`を選択しインポートします。

この辺りの手順はバージョンによっては
PackageManager経由でインポートするようになってたりするので
手元のUnityのバージョンに合わせて対応必要かもです。

![BoltForQiita0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/65921653-afc4-0690-8029-18af54f437b1.png)

成功すれば下記画面に進みます。Nextを押します。
![BoltForQiita1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/88c114e5-c796-7c3e-0a17-8e96ce1f06b8.png)

次に表示の設定です。右がプログラマーにわかりやすいような表記になっています。
今回は右の設定で進みます。
![BoltForQiita2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/393023af-36a1-8b81-4cfd-01a40a71a4fc.png)


次にAssemblyの設定です。
自作ノードなどもここで追加することができるようです。
今回は特に変更しないのでNextでそのまま進みます。
![BoltForQiita3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/19d78802-18ea-c48d-5901-89667313319c.png)

次にTypeの設定です。
ここも自作ノードなど追加時に設定します。
Generateで完了です。
![BoltForQiita4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/41d6d8b0-a799-7a1a-a26a-e22b688cfdf2.png)

最後にHierarchy上にEmptyなオブジェクトを追加し、
`Flow Machine`を追加しておきます。自動でVariablesコンポーネントも付与されます。

![BoltForQiita6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/f32406ae-173a-c28f-7a50-0107aef2aa3e.png)


##Variables

Variablesは文字通り変数です。
Inspectorで設定しておけばノードで参照できます。

下記は`Object Variable`の設定です。

![BoltForQiita5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/ad6f4f99-c98f-a3bf-1605-6cce4175d048.png)

Graph内で完結する変数は`Graph Variable`と呼ばれます。

`Graph Variable`を設定するには下記のようにWindowからVariablesを追加します。
![BoltForQiita11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/fb088fcb-7fc1-2ef4-bdbe-d673f233f30d.png)


今回用意した`Graph Variable`は下記です。
![BoltForQiita10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/c09486b7-d4b5-bad5-38dd-3038ce3c7b2b.png)


##ノード全容


まずはボタン押下でタイマー開始のフラグを立てます。
"どのボタンを押したか"というのは`Object`の`Get Variables`で
変数名を指定して取得します。

![BoltForQiita7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/624cc696-c916-560c-2499-0f9d9ec12ada.png)

次にフラグのチェックです。
Updateからノードを繋いで毎フレームボタン押下のフラグをチェックします。
また、秒数が0になったときにはタイマーを止めたいのでそのチェックも行っています。

![BoltForQiita13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/5fbff813-3295-482f-92ca-15d6d760f412.png)


次のブロックでは用意した変数の値からDeltaTimeを毎フレーム引いて、
その値の小数点以下をCeilで切り上げています。
これでカウントダウンのロジックは完成です。

![BoltForQiita9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/253154fd-f43b-4b42-b082-73d754b49cda.png)


最後にカウントダウンをViewに反映します。
テキストとなるゲームオブジェクトの変数名を指定して参照し、
先ほど算出したカウントを文字列としてテキストにセットします。

![BoltForQiita12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/870dfcfb-11c1-5bf9-fe53-1118aa9f0ea5.png)

##できたもの

アリが食べ物運んでるみたいでおもしろいですね。
![BoltForQiita1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/efbf3b35-1e73-5553-0248-65413c5a4775.gif)

##参考リンク
[UGUI Toggle Button - Bolt Visual Scripting](https://www.youtube.com/watch?v=P_W6hr4ipxQ)

[Unity Bolt Tips1.FlowGraph編集画面の使い方](https://littlewing.hatenablog.com/entry/2020/09/04/113940)