FarmRPG　Unity PlayerBasics Part5 　2/2 インスペクターの変数からアニメーションを再生する

# 概要
今回は再生時オブジェクトのインスペクターからPlayerのアニメーションを再生できるよう実装します。
以下gif画像は実装後の様子です。

![fdersafddfsdfsdsffdsfghdsgfsd.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/61ace0c4-9c5f-e0ce-a0c1-6f284a3027af.gif)




# 開発環境

IDE:Rider
Unity:2020.3.42(LTS)
OS:Windows10

# UnityEditor上の設定

Playerの子オブジェクト達にAnimatorコンポーネントをアタッチします。
コントローラーを指定します。
以下armsオブジェクトの場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/f4f22019-3290-a16b-2543-1e96072e97ce.png)




# 実装のポイント
新規クラスSettingを追加します。SettingはAnimatorのファイル名をIdに変換する役割があります。
MovementAnimationParameterControlクラスはanimatorを再生するように実装します。

以下PlayerオブジェクトのPlayerAnimationTestスクリプトのidleUpをOnにしたときの処理の流れ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/4357ef4c-5219-1d78-1a87-e1aa8ab619d8.png)




# コード部分

## EventHandler

```diff_c_sharp:EventHandler.cs
public delegate void MovementDelegate(bool idleUp, bool idleDown, bool idleLeft, bool idleRight);

public static class EventHandler
{
    // Movement Event

    public static event MovementDelegate MovementEvent;

    // Movement Event Call For Publishers

    public static void CallMovementEvent(bool idleUp, bool idleDown, bool idleLeft, bool idleRight)
    {
        if (MovementEvent != null)
            MovementEvent(idleUp, idleDown, idleLeft, idleRight);
    }
}

```

## Settings

```diff_c_sharp:Settings.cs
using UnityEngine;

public static class Settings
{
    public static int idleUp;
    public static int idleDown;
    public static int idleLeft;
    public static int idleRight;

    static Settings()
    {
        idleUp = Animator.StringToHash("idleUp");
        idleDown = Animator.StringToHash("idleDown");
        idleLeft = Animator.StringToHash("idleLeft");
        idleRight = Animator.StringToHash("idleRight");
    }
}

```

## PlayerAnimationTest

```diff_c_sharp:PlayerAnimationTest.cs
using UnityEngine;
public class PlayerAnimationTest : MonoBehaviour
{
    public bool idleUp;
    public bool idleDown;
    public bool idleLeft;
    public bool idleRight;

    private void Update()
    {
        EventHandler.CallMovementEvent(idleUp,idleDown,idleLeft,idleRight);
    }
    
}

```

## MovementAnimationParameterControl

```diff_c_sharp:MovementAnimationParameterControl.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MovementAnimationParameterControl : MonoBehaviour
{
+    private Animator animator;
    private void AnimationEventPlayFootstepSound()
    {
        
    }

    private void Awake()
    {
+        animator = GetComponent<Animator>();
    }
    
    private void OnEnable()
    {
        EventHandler.MovementEvent += SetAnimationParameters;
    }

    private void OnDisable()
    {
        EventHandler.MovementEvent -= SetAnimationParameters;
    }

    private void SetAnimationParameters(bool idleUp, bool idleDown, bool idleLeft, bool idleRight)
    {
        if (idleUp)
+            animator.SetTrigger(Settings.idleUp);
        if (idleDown)
+            animator.SetTrigger(Settings.idleDown);
        if (idleLeft)
+            animator.SetTrigger(Settings.idleLeft);
        if (idleRight)
+            animator.SetTrigger(Settings.idleRight);
    }
}


```







# 参考

## C#

## Unity Editot コンポーネント


### Animator
https://docs.unity3d.com/ja/2018.4/Manual/class-Animator.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/4de68364-78d3-d4bf-1819-a842d8e6ea2b.png)




## Unity スクリプト

### Animator.StringToHash

https://docs.unity3d.com/ja/2021.1/ScriptReference/Animator.StringToHash.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/5762f7e1-b729-458b-99b1-c17169ceb2e5.png)


### Animator.SetTrigger

https://docs.unity3d.com/jp/2018.4/ScriptReference/Animator.SetTrigger.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/b3eba7ce-5c1f-4aa1-41bb-05b51c911a3c.png)




## その他

Section1

https://www.udemy.com/course/unity-2d-game-developer-course-farming-rpg/learn/lecture/19844206#content

github コミット分（個人確認用　privateなので見れません）

https://github.com/RYA234/LearnFarmRPG/commit/98d4e6be2df9adc8272dd5486c4f833f4c5d928f