Unity PlayGround Referenceガイド④


<a href="https://docs.google.com/document/d/1xiWggQ5sdn8NRQxH-oiv3bR9rRJxgTmMioG5wEl74ls/edit?usp=sharing">Unity Playgroundリファレンスガイド日本語訳版</a>の内容をもとに、スクリプトの内容を一つずつ確認していきます。プロジェクトファイルはこれまでのものを続けて使います。

###Conditon RepeatとOn-Off
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/b0f12422-762a-ab84-b07f-54eb00c72c02.png)
ConditionRepeatスクリプトは一定の頻度で処理を繰り返すスクリプトです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/6517bc9a-d0ea-798c-57a8-d1cfbb576441.png)
Initial Delay：シーンファイルが読み込まれて何秒後に処理を開始するか設定できます。
Frequency；処理を繰り返す頻度を秒数で指定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/e791d9a5-f4ff-d9db-32c0-7cb6c8bd4639.png)
On-Offスクリプトはオブジェクトの表示と非表示を反転させるスクリプトです。よりプログラム的に言うと、Activeフラグをtrueまたはfalseに設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/bf5d0453-2db2-424f-45e9-dd975aaee22d.png)
Object to Affect：対象となるオブジェクトを指定できます。
Just Make Invisible：このチェックをオンにすると、SpriteRendererのオン/オフを切り替えられます。つまり、目には見えないが実際には存在するという、透明人間的なオブジェクトにすることができます。

それでは、この2つのスクリプトを組み合わせて、一定時間で表示と非表示を繰り返す魔法の鍵をつくってみましょう。

####出たり消えたりする魔法の鍵を作る

![スクリーンショット (293).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/18ebc056-b828-52c9-2bdd-bbaf29c3922d.png)
1：HierarchyでGameManagerを選択し、InspectorでAdd ComponentからCondition Repeatを絞り込み検索して、アタッチする。

![スクリーンショット (294).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/0db47d97-17c1-8e7b-0231-173d36f1f06b.png)
2：GameManagerのInspectorからCondition RepeatコンポーネントにあるFrequencyパラメータを任意の秒数（ここでは3秒）にする。その後、Gameplay Actionsから＋をクリックし、OnOffActionを選ぶ。

![スクリーンショット (300).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/35c8b499-5905-f54f-50dc-37bce00efa6a.png)
3:オブジェクトエリアからKeyGoldプレハブをHierarchyにドラッグ＆ドロップし、シーンビュー上でイチを調整する。その後、HierarchyにあるKeyGoldのインスタンスをGameManagerのInspectorにあるOn-OffコンポーネントのObject To Affectスロットにドラッグ＆ドロップする。

![スクリーンショット (301).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/bb8cc6a2-50b6-49ea-1235-7c9b42dafbb5.png)
4：再生ボタンをクリックして、3秒ごとにKeyGoldが点滅するか確認しよう。

##残りのActionsスクリプト

すでに述べたように、Actionsスクリプトは単独では動作せず、Conditionスクリプトと組み合わせて使用する。ここでは残りのActionsスクリプトの使い方について解説しよう。

###ConsumeResorceAction
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/25fe9bab-0028-1c1e-81cd-29ed4aa88965.png)
ConsumeResorceActionスクリプトはResorceスクリプトと組み合わせて使用します。Resorceスクリプトがついたオブジェクトはインベントリに格納できるのでしたね。格納したオブジェクトはConsumeResorceActionスクリプトを使うことで、特定のアクションを行うために使うことが可能になります。

ここでは、先ほど作った魔法の鍵を一部修正して、鍵のかかった宝箱を開け、コインを入手する仕組みを作ってみましょう。

####鍵のかかった宝箱を開けてコインを入手する

![スクリーンショット (349).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/99b7773f-957a-40df-9065-ea86d23ca5bc.png)
1：はじめにHierarchyでGameManagerを選択し、InspectorでCondition Repeatをオフにしておこう。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/f5e903f9-6aa4-19f7-4050-49c66fcea9a9.png)
2：続いてCoinプレハブの準備をしておこう。プロジェクトエリアのCoinプレハブを選択し、InspectorでOpen Prefabをクリックする。

![スクリーンショット (373).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/882284b2-bf62-a422-a496-71e44b6efea7.png)
3：Add ComponentでResorceを絞り込み検索し、アタッチする。

![スクリーンショット (377).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/7d41f2e4-5b73-e015-c373-990b8197fe4d.png)
4：続いてResorceコンポーネントのTyep of ResorceのCoinをクリックする。なお、このときAmmountのパラメータを変更すると、スコアの値を変更できる。最後に「＜」ボタンをクリックしてシーンビューに戻る。

![スクリーンショット (1636).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/7fbbee61-982c-4403-3bc2-50cb5952eef6.png)
5：続いて先ほどのKeyGoldにResourceスクリプトをつけよう。プロジェクトエリアでKeyGoldプレハブを選択し、InspectorでOpen Prefabをクリックする。

![スクリーンショット (1637).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/f75a91ca-768c-25a6-8eea-b0a9e255632b.png)
6：InspectorのAdd ComponentからResourceを絞り込み検索し、アタッチする。

![スクリーンショット (1638).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/e7c11a47-b478-8a91-8c4a-3af0a796008f.png)
7：ReferenceコンポーネントのType of ResourceメニューでKeyを選択する。この時、先ほど設定したCoinプレハブと同じようにAmmoutのパラメータを変更すると、一度に入手できるKeyの数をふやせる。設定が終わったら「＜」ボタンをクリックしてシーンビューに戻る。

![スクリーンショット (363).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/a0499007-c844-487c-077f-7b922f4e81fa.png)
8：プロジェクトエリアのTreasureChestGoldプレハブを選択し、InspectorでOpen Prefabをクリックする。

![スクリーンショット (364).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/0be54a59-7e75-a86e-3047-1339163ad6bc.png)
9：TreasureChestGoldプレハブを開き、Add ComponentからCondition Collision を絞り込み検索して、アタッチする。

![スクリーンショット (365).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/53b95349-36fc-cb34-d390-b62d7df69baf.png)
10：Condition CollisionコンポーネントでFilter by Tagをオンにして、Tag to check forをPlayerにする。その後、Gameplay Actionsで＋ボタンをクリックし、ConsumeResorceActionを選択する。

![スクリーンショット (366).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/0dbd1469-3905-2253-038f-9ebe495ff5c7.png)
11：ConsumeResorceActionコンポーネントでType of ReferenceメニューからKeyを選択する。

![スクリーンショット (367).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/00afd08d-094a-b303-18e5-141b32385d27.png)
12：再びCondition CollisionコンポーネントでGameplay Actionsから＋ボタンをクリックし、Destroy Actionを選択する。

![スクリーンショット (368).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/cfc28473-bc0a-f87b-a6c4-e36fea763de1.png)
13：続いてTargetメニューからThis Objectを選択する。

![スクリーンショット (369).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/650d596c-8e47-d93a-0162-e688c8d463f7.png)
14：プロジェクトエリアからCoinプレハブをTreasureChestGoldプレハブのDestroy ActionコンポーネントにあるDeath Effectスロットにドラッグ＆ドロップする。その後「＜」ボタンをクリックしてシーンビューに戻る。

####展開課題
![スクリーンショット (383).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/9b3da455-2fa5-b0ed-461d-1897bd2c9ae5.png)
Death EffectスロットでP_Impactを選択すると、Coinプレハブが表示されるかわりに、Impactエフェクトが表示される。そのうえでCoinプレハブを表示させるには、再びCondition CollisionコンポーネントでGameplay Actionsから＋ボタンをクリックし、GameObjectActionを選択して、Coinプレハブを選択すればいい。

![スクリーンショット (384).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/4eb43331-4c81-ec6a-6d75-8c73792191b0.png)
12：プロジェクトエリアのTreasureChestGoldプレハブをHierarchyにドラッグ＆ドロップする。その後、シーンビュー上でTreasureChestGoldインスタンスの場所を調整する。

![スクリーンショット (378).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/a294f30f-2cae-c2e2-ca13-3f2975278c17.png)
13：再生ボタンをクリックして、Zombieを右に移動させよう。

![スクリーンショット (379).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/c9b1e592-6a14-6a07-7d77-fc51ef02125b.png)
14：GoldKeyに触れるとGoldKeyが消えてUIにインベントリが表示される。続いて右に移動させていく。

![スクリーンショット (380).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/9a115770-895f-3589-eb47-0a4025d52f8d.png)
15：TreasureChestGoldに触れると、TreasureChestGoldが消えて、Coinが表示される。

![スクリーンショット (381).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/286f8b4d-bfa4-043f-7b59-6bcc22899f7c.png)
16：Coinに触れるとインベントリにCoinが表示される。このようにResourceスクリプトとConsumeResorceActionスクリプトを連鎖させることで、複雑なメカニクスが作れる。

###DialogueBalloonAction
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/aabdb317-c464-bbb8-2be7-94e31cdd0155.png)
DialogueBalloonスクリプトを使用すると、簡単なセリフをゲームに追加できます。 Roguelikeのサンプルシーンに例があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/fb5701d8-5c25-05e6-aff0-7d04552bc098.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/728e3932-44b6-3091-5581-41f47b7e4141.png)

このスクリプトを使って、簡単な会話イベントを作ってみましょう。

####会話イベントを作る

![スクリーンショット (1679).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/0e1ec41c-b2f3-a480-a1ac-3787f9a45047.png)
1：シーンビュー上でZombie、GoldKey、TreasureChestGoldの位置を修正します。HierarchyでGameManagerを選択し、InspectorでCondition Repeatのコンポーネントをオフにしておきます。これでGoldKeyが点滅しなくなりまｓ。

![スクリーンショット (1678).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/e99e81b2-e857-facc-5553-b2413a18d491.png)
2：プロジェクトエリアからAlien2をHierarchyにドラッグ＆ドロップして、シーンビュー上で位置を調整します。その後、Alien2のInspectorからBox Collider 2Dコンポーネントをオフにします。これでAlien2に当たり判定がなくなり、Zombieが通り抜けられるようになります。

![スクリーンショット (1660).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/d7a23084-14ee-d440-3258-756ea6019fde.png)
3：Hierarchyエリアで右クリックし、Create Emptyを選択します。

![スクリーンショット (1662).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/c407989e-299b-71b9-c238-b1d661cc6fed.png)
4：新しくできたGameObjectのInspectorで名称をTalkに変更し、位置を調整します。Alien2の左側に透明なサークル（＝Talkオブジェクト）が表示されるようにします。

![スクリーンショット (1663).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/746160d6-c9fb-29f8-b5c1-e9ef7e8ad1bd.png)
5：TalkのInspectorでAdd ComponentからBox Collider 2Dを絞り込み検索して、アタッチします。

![スクリーンショット (1664).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/cc69ba3d-cf26-b962-fb8c-c2e0c70a796c.png)
6：TalkのInspectorでAdd ComponentからCondition Areaを絞り込み検索して、アタッチします。

![スクリーンショット (1665).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/21ba9a49-bbb4-b98d-b3ee-154f6b1cc3fc.png)
7：TalkのInspectorでBox Collider 2DのIs Trigerをオンにします。続いてCondition AreaコンポーネントでFilter by Tagをオンにして、Tag to check forメニューをPlayerにします。

![スクリーンショット (1666).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/6fee24f6-170d-558c-724e-aff44de57732.png)
8：Condition AreaコンポーネントのGameplay Actions欄にある＋ボタンをクリックし、メニューからDialogue Balloonを選択します。

![スクリーンショット (1667).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/dfe0ee47-deec-69cc-3a3c-cf24c109987c.png)
9：Dialogue BaloonコンポーネントでText to display欄に表示したいテキスト（ここでは「Hey! get a key」）を入力します。次にHierarchyでAlien2をTarget Object欄にドラッグ＆ドロップします。

![スクリーンショット (1668).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/326ac09b-9995-4d31-4d3f-5a3a28f13c03.png)
10：再生ボタンをクリックして、ZombieをAlie2に近づけると、メッセージが表示されることを確認します。Enterキーを押すとメッセージが消えます。

####展開課題　会話の連鎖
![スクリーンショット (1669).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/4aa1a39c-420b-23e7-7a2e-f086f5e0dac4.png)
1：一つのイベントで会話を連鎖させるには、同じオブジェクトにDialogue Baloonコンポーネントを追加していきます。同じようにTalkオブジェクトのInspectorからAdd Componentをクリックし、Dialogue Baloonを絞り込み検索して、アタッチしましょう。

![スクリーンショット (1670).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/5cc239c5-877f-fb80-3f1d-83fb803a233c.png)
2：複数のキャラクターの掛け合い表現も可能です。ここではZombieにお礼を言わせてみましょう。まずDialogue BaloonコンポーネントでText to display欄に表示したいテキスト（ここでは「Thanks」）を入力します。次にBackground colorをクリックし、メッセージウインドウの色を緑色に変更します。

![スクリーンショット (1671).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/563fa696-0203-8d61-5520-d2675b261997.png)
3：HierarchyでZombieを選択し、TalkオブジェクトのInspectorを開きます。その後、先ほどアタッチした新しい方のDialogue Baloonコンポーネントにある、Target ObjectスロットにZombieをドラッグ＆ドロップします。

![スクリーンショット (1672).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/53af092f-c83f-f3d2-5e3f-6c7356d1afe7.png)
4：2つめのDialogue Baloonコンポーネントの名称部分を1つめのDialogue BaloonコンポーネントのFowlloing Textスロットにドラッグ＆ドロップします。

![スクリーンショット (1676).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/2aee38e8-a691-0f17-cb1d-ef63c0abdc4d.png)
5：実際にゲームを動かして確かめてみましょう。Zombieが近づくとAlien2のメッセージが表示されます。

![スクリーンショット (1677).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/ab5630b6-a92c-0585-5061-413230ab629b.png)
6：Enterキーを押すと、続いてZombieのテキストが表示されます。

![スクリーンショット (1680).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/81eaa67b-aa9a-4667-01ca-23bd23e8aad5.png)
7：同じようにDialogue Baloonコンポーネントを連鎖させることで、延々と会話を続けられます。英語だけでなく、日本語の表示も可能です。

###Teleport Action
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/08296749-2d4e-5f96-e51f-c4173916fdaa.png)

Teleport Actionスクリプトは指定したオブジェクトをシーンビュー上の特定の座標に瞬間移動させるスクリプトです。このスクリプトがアタッチされたオブジェクト自体を瞬間移動させることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/206d36f8-59ae-bf8b-1cb5-3e48e15241b2.png)
Object To Move：瞬間移動させるオブジェクトを設定する。空欄の場合はこのスクリプトがアタッチされたオブジェクトが瞬間移動する
New Position：瞬間移動後のワールド座標
Stop Movements：オンにすると移動後に元のキャラクターの移動速度をゼロにできる

それでは、このスクリプトを使って障害物を回避する仕組みを作ってみましょう

####瞬間移動で障害物を回避する

![スクリーンショット (1681).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/0244b9ce-d710-fe4e-ea82-5922bc433f2f.png)
1：はじめにHierarchyでZombie以外のオブジェクトを選び、Inspectorでオブジェクトを非表示にしておきます。

![スクリーンショット (1682).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/1b17c873-ab0c-34fb-edc9-9f53166675f7.png)
2：プロジェクトエリアからOrcプレハブをHierarchyにドラッグ＆ドロップして、シーンビュー上で場所を調整します。

![スクリーンショット (1684).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/809e7801-3282-cad0-b51e-2556b2f8ac17.png)
3：OrcのInspectorでScaleをX=2、Y=2にします。次にRigidbody 2DのConstraintsメニューを開き、Freeze PositionとFreeze Rotationをすべてオンにします。

![スクリーンショット (1685).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/98bf446d-52b9-8061-01a9-7a2b3305330c.png)
4：最後にOrcのTagをEnemyからUntaggedに変えておこう。ここがEnemyのままだと、Zombieに触れると爆発してしまうので注意。

![スクリーンショット (1686).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/cca16018-ab0c-6098-1076-a5758ee9efb2.png)
5：これでZombieが決して通り越せない障害物ができた。ここから画面の左側に移動すると、瞬間移動して右側に向かう仕組みを作ってみよう。

![スクリーンショット (1687).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/59767fd2-6a27-4b9d-94c4-ab6a41248a7b.png)
6：Hierarchyエリアで右クリックし、Create Emptyを選ぶ。

![スクリーンショット (1688).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/95355d9e-4fd2-b4ad-7fc3-f4fef8906eaf.png)
7：新しくできたゲームオブジェクトの名称をTelleportとして、PositionをX=-10、Y=ｰ4にする。

![スクリーンショット (1689).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/9b44fcf9-9727-c64a-8e6f-b4c8ae2a4120.png)
8：TelleportオブジェクトのInspectorからAdd ComponentでBox Collider 2Dを絞り込み検索し、アタッチする。

![スクリーンショット (1690).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/0c7edded-8f30-5a28-e255-7d9b8db7a0b3.png)
9：TelleportオブジェクトのInspectorからAdd ComponentでCondition Areaを絞り込み検索し、アタッチする。

![スクリーンショット (1691).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/4be2a8d1-1736-cdf5-936f-eb7b121d426e.png)
10：TelleportオブジェクトのInspectorからBox Collider 2DコンポーネントのIs Trigerをオンにする。次にCondition AreaコンポーネントのFilter by Tagをオンにして、Tag to check forメニューからPlayerを選ぶ。

![スクリーンショット (1692).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/a85d7e69-e38d-7bdd-b8cf-88fe8ed2d868.png)
11：Condition AreaコンポーネントのGameplay Actionsで＋ボタンをクリックし、メニューからTelleportActionを選ぶ。

![スクリーンショット (1695).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/0a0e885b-7a28-a4d6-0490-c74ee222a5b2.png)
12：HierarchyにあるZombieeをTelleportコンポーネントのObject To Moveスロットにドラッグ＆ドロップする。その後、New Positionでテレポート後の座標（X=7、Y=5）を選ぶ。

![スクリーンショット (1694).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/7233ee40-c76b-340d-4993-7894b8ec3066.png)
13：再生ボタンをクリックして、Zombieを画面左側に移動させると･･･

![スクリーンショット (1693).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166666/9b34a624-807a-a9bb-c97b-2ea3c9b03290.png)
14：画面右上に瞬間移動して、地面に落ちてくれば成功だ。