【Unity】モデルにアニメーションをつける


環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Xcode version 10.0(10A255)
⭐️Unity 2018.2.14f1
⭐️iPhone7 IOS11.4.1

<font color="Magenta">モデルにアニメーションをつける</font>
実際に動かした動画はこちら↓↓
https://twitter.com/nonnonkapibara/status/1058761176014708736
<img width="375" alt="IMG_0079.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/f8fd6dea-ef08-b1bf-509a-0b4bfeff5ad1.png">

<img width="375" alt="IMG_0082.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/44b2966c-7dfd-c9ad-7bd1-c36df62f3517.png">


1.「Mixamo」からキャラクターとアニメーションをダウンロードする
https://www.mixamo.com/#/

<img width="1047" alt="Mixamo_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/c405d95d-e5c8-5d28-9890-a60222e28c5b.png">

<img width="683" alt="Mixamo.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/6ab32096-7075-8aea-3bda-06d9e3a10557.png">


私はサンプルとして３つダウンロードしました。
<img width="198" alt="スクリーンショット 2018-11-03 21.27.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/756fcfd7-a3b5-293c-47ca-8f0793de182f.png">

2.UnityのAssetsインポートする
<img width="359" alt="スクリーンショット 2018-11-03 21.29.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/5a4e0a8c-7b0a-e16e-ca99-5a96fdab558d.png">

3.取り込んだキャラクターに色が付いてないので、
「Extract Textures」をTapして、「Choose」を選択する。
「Extract Materials」をTapして、「Choose」を選択する。
<img width="1001" alt="スクリーンショット 2018-11-03 21.38.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/a605053b-5d00-1a3e-f16a-f925c69c09a4.png">

4.Animationタイプを「Legacy」にする
<img width="1065" alt="スクリーンショット 2018-11-03 21.45.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/555e90c9-68a0-2009-d311-8fb972c95b5e.png">

5.キャラクタが透けているので
Assetsを選択して「Rendering Mode」を「Opaque」にする。

<img width="1044" alt="スクリーンショット 2018-11-03 21.41.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/95440725-f78f-c68d-b497-1b16e8b7b38d.png">

6.Warp ModeをLoopにする（上と下の２箇所）
<img width="1100" alt="スクリーンショット 2018-11-03 21.48.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/393ccaea-9cf8-f5cc-8960-e789446f92f2.png">

<img width="926" alt="スクリーンショット 2018-11-03 21.49.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/67f05c0d-dda1-e60e-e161-837b40f52580.png">

7.GameObjectを作る
<img width="618" alt="GameObject_と_Menubar.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/5612e1a7-c9e9-c197-0143-6468ada225d7.png">


<img width="126" alt="Unity_2018_2_14f1_Personal__64bit__-_nonDance_unity_-_nonDance_-_iPhone__iPod_Touch_and_iPad__Personal___Metal_.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/0e861f74-2565-7630-0c0a-1af5d4a1a042.png">

GameObjectをDanceObjectに名前を変える
<img width="1366" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/131a82f6-9585-2fc3-a180-75130fe38b63.png">


```c#:DanceScript

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DanceScript : MonoBehaviour {
    public GameObject danceSamba;
    public GameObject danceHiphop;
    public GameObject danceJazz;

    private Animation anima;

    public void onTapSamba() {
        anima = danceSamba.GetComponent<Animation>();
        danceSamba.SetActive(true);
        danceHiphop.SetActive(false);
        danceJazz.SetActive(false);
        anima.Play();
    }

    public void onTapHipHop()
    {
        anima = danceHiphop.GetComponent<Animation>();
        danceSamba.SetActive(false);
        danceHiphop.SetActive(true);
        danceJazz.SetActive(false);
        anima.Play();
    }

    public void onTapJazz()
    {
        anima = danceJazz.GetComponent<Animation>();
        danceSamba.SetActive(false);
        danceHiphop.SetActive(false);
        danceJazz.SetActive(true);
        anima.Play();
    }
}
```


<img width="1288" alt="スクリーンショット 2018-11-04 1.05.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/edb4b7fb-56f1-5454-fd50-891fb587b4ee.png">

Play AutomaticallyにチェックONだと、ゲーム開始時に自動でアニメーションが再生されるので、OFFにする

<img width="1287" alt="スクリーンショット 2018-11-04 1.08.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/ae3aa723-f509-b1d8-4641-0592e18ca4b9.png">

<img width="1161" alt="スクリーンショット 2018-11-04 1.18.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/8ecc74a2-7747-ca05-5e56-0b438d15a974.png">

<img width="1282" alt="スクリーンショット 2018-11-04 1.20.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/b2dc1edc-50c5-828a-629e-34acfe7cc436.png">

<img width="1288" alt="スクリーンショット 2018-11-04 1.21.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/71289cbe-a735-7a47-e18a-fe49452a024c.png">


Unity AR Hit Test Exampleにボタンが反応するように追加する。
<img width="1263" alt="スクリーンショット 2018-11-04 1.55.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/0a2f74b1-a5ce-2d0f-6823-a8191059b908.png">



<img width="584" alt="スクリーンショット 2018-11-04 1.25.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/a659d1d7-ba20-63d6-671c-eb2e1804f9f7.png">

```
using UnityEngine.EventSystems;
```

<img width="908" alt="スクリーンショット 2018-11-04 1.28.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/e099b938-24bd-15e9-4248-8ea6b800d080.png">

```
if ((Input.touchCount > 0 && m_HitTransform != null) && !IsPointerOverUIObject())
```

<img width="883" alt="スクリーンショット 2018-11-04 1.30.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/fa86deaf-12be-f804-9dcb-112566810e62.png">

```
        // ボタン押下処理
        bool IsPointerOverUIObject()
        {
            PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
            eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
            List<RaycastResult> results = new List<RaycastResult>();
            EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
            return results.Count > 0;
        }
```