【Unity】デザイナーさんにお勧め？Gameplay Ingredientsを紹介する！

# 自己紹介
人生初めてのハッカソンがUnity公式が協力してくれるやつで興奮が止まることを知らない大学生です。
# Gameplay Ingredientsとは
私が以前書いた記事で出会ったパッケージです。
以前書いた記事↓

https://qiita.com/AtsuAtsu0120/items/a58d891c74542bde990b

非公式パッケージなのですが、公式のデモにも使われていたので強いやつでしょう。

リポジトリ

https://github.com/peeweek/net.peeweek.gameplay-ingredients

## なに用のパッケージなのか
ドキュメントによると
>Gameplay Ingredients is a set of Runtime and Editor tools for Unity Games : A collection of scripts that ease simple tasks while making games and prototypes.

とのことで、より簡単に色々作れるようになるというパッケージらしいです。
少し触った感じすぐに恩恵を感じれそうでした。
# 今回の環境
Unity 2022.2.10f1
Gameplay Ingredients 2021.3.2

Gameplay IngredientsはUnity 2021にしか公式対応していませんが、公式デモも2022にアップグレードして使っているので大丈夫でしょう。
# インストール方法
Gameplay Ingredientsのドキュメントを見れば大丈夫でしょう。

https://github.com/peeweek/net.peeweek.gameplay-ingredients#how-to-install-20202-and-newer

少し特殊なインストール方法なのでそこは注意してください。
この方法は特殊ですが、便利な側面もあるのでぜひ使えるようにしてみてください。
詳しくは公式ドキュメントを…！

https://docs.unity3d.com/ja/2022.2/Manual/upm-scoped.html

# 初期設定
パッケージをインストールするとこういった画面が表示されます。
※されない場合は[Window] --> [Gameplay Ingredients] --> [Welcome Screen]から開けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083521/96c06b4e-a301-2966-49dd-e14f5dfe32f8.png)
そのままNextをクリック

次の画面は、```Create GameplayIngredientsSettings Asset```をクリック後Nextをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083521/8c63811a-afbe-6f6a-9546-36b5659982f0.png)


最後に使っているレンダーパイプレインを選択し完了。
closeをクリックして画面を閉じてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083521/6acf0e6d-7611-a78e-4a6e-8960a22bbfa5.png)
# 初期設定後自動生成されるアセット群
## First Person Character
Character controllerです。
このPrefabをシーンに配置しその子にキャラクターのメッシュ（オブジェクト）を配置するだけでキャラクターコントローラーが実装できます。

個人的にとても凄いなと思ったところは、Input SystemにもInput Managerにも対応しているというところです。
Input System信者の私にはInput Managerは対応しなくてもいいだろと思ってはいますが昔から使われていますからね。
まだ移行できてないこともあるでしょう。

## ○○Manager
ほかは様々なManagerがあります。
深くは触れませんが、それぞれこの後話す自動で生成されているシーンの中で使われているようです。
たぶん
# 自動で生成されているシーン
## MainMenu
スタート画面です。
デフォルトではゲームをスタートさせるボタンとExitボタンがありますね。

いつものように、Build Settingsにほかのシーンを追加しないと動かないので注意。
## GameLevel
デフォルトで用意されている実際にプレイヤーがゲームをプレイするシーンです。
シーン名から察するに、ステージクリア系のゲームを想定しているのでしょうか。

### バグ？
私の環境ではURPを選択したにもかかわらず、オブジェクトにマテリアルがアタッチされていない状況でした。
操作ミスかもしれませんが、こういった事例があることを記しておきます。

## Boot
なんのためのシーンか分かりませんでしたっ！
# コンポーネントの解説
ここからはそれぞれのシーンで使われているコンポーネントを紹介したいと思います。
間違っている可能性もありますので、Gameplay Ingredientsのドキュメントのほうを信じてください。
## イベント
コンポーネントのアイコンが青のものがイベントです。
ここからアクションを呼び出せるようです。
イベント発火のタイミングはそれぞれのイベントで定義されているので下記を参照。

https://peeweek.readthedocs.io/en/latest/gameplay-ingredients/reference/events.html

## ロジック
コンポーネントのアイコンが緑のものがロジックです。
ランダムでアクションを起動したり、少し遅れてアクションを起動したり…
そういった特殊なことができるものらしい。スクリプトを書かずにできるのがメリット。
こちらも一覧がありますので、見てみてください。

https://peeweek.readthedocs.io/en/latest/gameplay-ingredients/reference/logic.html

## アクション
コンポーネントのアイコンが赤のものがアクションです。
実際にゲームに影響を与える部分です。
純正のUnityでいうとUnity Eventを想像すると分かりやすいです。
こちらも一覧あり。

https://peeweek.readthedocs.io/en/latest/gameplay-ingredients/reference/actions.html

# オリジナルのアクション・ロジックを作りたい。
もちろん、C#スクリプトを書くことでオリジナルのアクションやロジックを作ることができます。
そのためには、CallableというGameplay Ingredientsの機能を使います。

実装は比較的容易で、```ICallable```もしくは```LogicBase```、```ActionBase```を継承することで可能です。
# スクリプトからCallableを呼び出す。
C#スクリプトからCallableを実装することも可能で```Callable.Call```関数を使います。
この関数は、Callableの配列も引数として渡すことも可能で同時に複数のCallableを実行できることがメリットだと思います。

# まとめ
今回、紹介したものはGameplay Ingredientsのほんの一部です。
ほかにも、ManagerやState Machineなど機能があります。
Managerは、シーン切り替え時のFadeに使われています。
私が今の知識量の段階でこのパッケージのメリットとデメリットを上げるなら以下の通りです。
## メリット
 * 簡素なゲームを容易に作り上げることができる。
 * 拡張性が高い
 * デザイナーなども使いやすい
     * ノーコードで相当いいところまで作れそう。

## デメリット
 * 非同期処理ができない
     * ```ActionBase```や```LogicBase```などでは非同期処理を記述することができません。
 * Unity本来のノウハウが使いにくい。
     * ゲームを手軽に構築できる反面、Unityのシステム面の勉強などに使うのは難しいと思いました。
 * 基本的に提供されている機能が一人称のステージクリア制のゲーム向けなものがほとんど

## このパッケージをオススメする人
個人的には、デザイナーさんなどでUnityのシステム面をあまり使わない・勉強しない場合ならとても良いと思いました。
この記事が少しでも役に立てば幸いです。

# おわりに
知った当日にこの記事を書いたので間違っていないか心配です。
次はこれを使わずにインタラクティブなVFXを作りたいなーと思ってます。
では、また～