Unity Feelを使ってみる

## Feelとはなんぞや
コードを書かなくても演出や動きをオブジェクトにつけることが出来るAsset
## 基本
### ものを動かしてみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/873d02c0-8054-4746-4c51-3105b8c82791.png)
動かしたいものにMMFPLAYERをアタッチ。
Add new feedbackからTranceform＞Positionを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/8c89f0d1-b614-bdcd-3457-290a1d82b678.png)
Positionをひらくとどれを動かすのかおしえてと出ているので動かしたいものをドラック＆ドロップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/7eeb763b-9793-4364-cee3-0e97b7343dc8.png)
あとはどう動かすかの設定で、とりあえず変化させてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/909ebfdc-2322-e855-29b9-ef45a842a4f7.png)
シーンを再生して、Playを押してみると動く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/8896fa0b-d89e-8197-80d6-8a24bc60c9ec.png)
これが理解できればPositionのパラメータで好きな変化をつけることができるし、Add　new Feedbackで様々な種類のエフェクトをつけることができる。
パーティクルや、サウンド、ループなどノーコードで使いできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/7c2dcffd-1e9b-6e46-53d9-bbbc0f26d3eb.png)

### スクリプトで制御する。
ゲームでエフェクトは何らかのトリガーで発生することが多い。その処理をスクリプトでおこなう。

```
       [SerializeField] private MMFeedbacks test1;
```
```
        public void FeedBackTest()
        {
            test1?.PlayFeedbacks();
        }

```
MMFeedbacks型の変数を用意し.PlayFeedbacks();で実行する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/43c0e523-3264-e1c8-a9ca-5f87f2f80889.png)
変数には実行したいMMFPlayerを設定する。
.PlayFeedbacks()でさっきのPlayと同じことなのでこれ条件文で囲えばスクリプトで制御できる。


## 発展
### カメラをゆらす
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/4678ef24-90d5-d06c-66ba-e4a178afa7b7.png)
通常のカメラに親のオブジェクトをつくる。
そのオブジェクトに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/db1de2f2-5433-e32e-86db-19096a2ed26a.png)

MMWiggle、MMCameraShakerをアタッチする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/257d75ad-a3ea-278d-3d62-164436f1cb2c.png)

WigglePermittedのチェックをはずす。
WiggleTypeNoiseに設定
カメラとは別のゆらしたいオブジェクトにMMFPlayerを設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/af1e70ae-aeef-b91e-30b8-bf3d8214bc90.png)
CameraShakeを追加

これで揺れるようになる。

### Cinemachineカメラでの設定方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/908c13c7-b5c2-af87-8622-e8da531526d7.png)
メニューから2Dカメラを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/069e2df3-ef52-5940-5c88-130cbc724880.png)
VirtualCameraのAdd ExtensionよりImpulseListenerを追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/8bc021b9-ad99-bd61-db81-5111e8e971c4.png)



別のGameObjectにMMFPlayerを設定
FeedBackにCinemachine ImpulseSouceを追加(Sourceがついているほう）
スクリプトのCinemachine ImpulseSouceをAddComponentで追加。
追加したObjectをドラック＆ドロップでInpulseSouceに設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/ed196f36-9d64-9d2f-3ed8-bb8a016b52e8.png)
画面ではFeelTestが設定されている。

プレイで画面揺れるようになる。

## エラー文の対処

### MMFPlayerを使うのがおすすめだよ警告
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/65db02de-cad1-0430-a7a2-27f1602b971f.png)

下のConver to MMF_Playerを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/6d34f78b-4ac0-780d-d29d-1e91fd5f3f40.png)

## Tips
### Camera Shake とChinemachine Impulseは同時に使用できない。
CameraShakeを使用する時はChinemachineBraneが無効になっている必要がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/b49af53a-3cf2-eed4-e11f-6fa45b19e672.png)


## 参考サイト
https://raspberly.hateblo.jp/entry/Feel

https://christopherhilton88.medium.com/how-to-make-the-camera-shake-using-impulse-listener-extensions-in-cinemachines-virtual-cameras-4522de85fea9

https://light11.hatenadiary.com/entry/2019/07/23/210040

https://light11.hatenadiary.com/entry/2019/07/25/214726

https://www.karvan1230.com/entry/2021/06/01/221102

https://feel-docs.moremountains.com/recipes.html