Fungusをなんとなくそれっぽく使う

#準備するよ！
####①AssetStoreから「Fungus」を探してね！
どこかわかんにゃい:joy:
→一番上の「Windows」タブの中にあるよ〜!
![fungus.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/dd40efe0-4a21-1851-fa61-24284f068ace.jpeg)

このきのこのやつね:mushroom:

####②何も考えずに全てをインポート
まあまあ時間かかるから茶でもしばいて:tea:

文字読むのめんどい人はこっち見て。めっちゃわかりやすいから。
https://youtu.be/evENw4lCyE4

#使ってみるよ！
・勝手にfungusとかのフォルダ追加されてるからとりま消さないようにする
・「Fungus」→「Resources」→「Prefabs」のフォルダにいく
・「SayDialog」をヒエラルキーにペコっと貼り付けて！（でも消さないでおいてね）
・貼り付けたやつを**Unpack Prefab**して、**自分の作ってるPrefabフォルダ**にいれる
・「SayDialog」のパネルだのテキストだのイメージだの自分仕様にする

・上のバーって一覧あるタブの「Tools」→「Fungus」→「Create」→「Flowchart」
　これ出したらSceneViewみたいにずっと表示するように置いておくと便利💡

![NewBlock.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/dc2e35f2-f9b0-0cdd-f45e-d2ae139b908e.jpeg)

・FlowchartのNewBlock押すとこんなの出てくる
・Block Nameは自分がわかる名前でおk
・Execute On EventでFungus（会話ウィンドウ）を呼びたいとこを設定

#Execute On Event ってどれ使えば良いの？
**・Game Started**
　ゲーム開始時にすぐに呼びたい時に使う

**・Scene/Message Received**
　自分でタイミング決めたい人用。スクリプトとかから呼ぶやつ

**・UI/Button Clicked**
　ボタンを押して呼びたい時に使う

他にも色々種類あるからもっと調べれば良い感じに綺麗にできるんだろうけど
まあ大体この3つでどうにかなると思ってる。
やだ！やめて！怒らないで！

FlowchartのNew Blockがあるところで右クリック→Add Blockで新規作成できる
呼びたいタイミングが違うやつとか、ウィンドウごとにじゃんじゃか作ろうね〜

#実際に会話を作ってみる
さっきのExecute On Eventがあった場所（Blockを押すと出てくるヒエラルキー）
の下の方に「↑」とか「↓」とか「＋」とかあるっしょ？「＋」押してみ。
![command.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/0483c816-f1f3-6f72-8877-8f1bd2d1fca9.jpeg)
げろぉ……なんかめっちゃある。けどここで会話を作ります。

**Narrative/Say**
・普通の会話。タ特に何も考えずにセリフを入れるだけのお仕事。基本はこれ使う。
ちなみにこれ系は全てコピペできるから同じやつをわざわざ探さなくても良いよ。便利！
![say.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/f00a6bbc-b769-d797-8c0d-7aefca06a6ec.png)
・Story Textに発言させたいテキストを入れる
・Show Alwaysにチェック入れてると毎回呼ばれる。外すと1回だけしか表示されない
・Wait For Clickのチェックを外すと自動で次にいく。多分。確認してないけどきっとそう…
あとはそんないじらんでも平気かな。

**Flow/Ifとか/Elseとか**
・C#のifとかと一緒
![Flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/b950dd38-e310-6760-1871-ec0475f0ea96.png)

Variableってところで条件を入力するんだけど、さっきのFlowchartの下らへんに
「Variables」って白いのが隠れてると思うからクリックして表示。
「＋」を押すとBooleanとかIntegerとか色々あるので作りたい条件を設定。
![bool.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/9ae760e3-e0f6-5787-56c2-c19c36c48e1b.jpeg)
・チェックを入れたらTrue、なきゃFalse。簡単だね！
ここで条件を作っておけばさっきのifブロックで選択できるようになるよ！
**ifとかの条件定義→Sayコマンドなど→Endコマンド**で挟むように置いてね。
置いたコマンドの左側にある≡で上下の順番を変えられるよ！Endは必須！

**Variable/Set Variable**
・会話の中で条件を変更するやつ
![variable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/7166653b-83ac-f25f-598a-2d80f9ac05f0.png)
変更したいタイミングで入れて、=でTrue、!=でFalseにする。
この辺は変更してみたら表示されるから目で見て設定できると思う〜

***
ここまでで他の会話でboolでTrueにして条件で会話内容を変えたり、
話しかける度に内容が変わるとか出来るようになりました！
これだけでもゲームが作れるね:whale::heartbeat:

#選択したりとかObject動かしたりとかしたい
・選択肢
　①選択肢の数だけ**Flowchart**で**Add Block**する
![スクリーンショット 2020-08-30 15.17.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/f344d48a-7e53-6c5d-0c53-383a0bdae219.png)
選択した後に実行したいことを各ブロックに設定する。
セリフを出す〜とか、BoolをTrueにする〜とか、後でやるけど画面遷移する〜とか

　②選択肢の数だけ**Narrative/Menu**を追加
![menu.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/fb2018d8-c920-5eb7-d4fd-476c17011766.jpeg)
さっきの画像でいうNew Blockのところ。
選択肢を出したいBlockに選択肢分のMenuを追加！
・Text：選択肢に表示するテキスト。「はい」とか、「そんなことはできない！」とか
・Target Block：選んだ時に移動する先のBlockを設定
これをすることでFlowchart上で分岐が作られます〜
![YesNo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/fa08ccd6-0a26-3ae7-dd01-caeeced5a610.jpeg)
おわかりいただけただろうか…
もうこれでFungusマスターを名乗っても良いレベルです。
***
・その他Scriptを利用してFungusを制御していく系とか:smirk:
###Messageで制御
①**Execute On Event**を**Message Received**に変更
②その下のMessageって書いてあるところに受け取るMessageを設定（何でもいいよ）

これだけで、他の会話ウィンドウとかからSend Messageをしたら呼び出すという動きができる

###FungusからScriptを制御
**Scripting/Call Method**
![CallMethod.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481448/f9b828c3-07de-6196-c232-ed86c89d6ac8.jpeg)
・使いたいScriptがついてるObjectをTarget Objectにペコっと貼り付ける
・使いたいScriptの名前を書く：()は付けなくていいよ
・Delayで何秒後に実行されるか決める

これでFungusからScriptを呼ぶことに成功！やったね！

###ScriptからFungusを制御
<code>using Fungus;</code>
を必ず付けてね、必ずだよ！！

<code>Flowchart.BroadcastFungusMessage(fuga);</code>
Fungusを呼びたい箇所でこのコードを書く。
**fuga**の部分にMessageで制御の時にも使ったMessage名を書く。
これでScriptからMessageを送信し、Fungusが呼び出せる！

やったねじょにちゃん、Fungusが使えるよ:no_mouth::heart: