ユニティちゃんを動かす

似たような記事はゴマンとあるけど、毎回どうだったけー？と悩むので、自分用の備忘録として綴ることにする。

##動作確認バージョン
Unity 2019.4.13f1


##まず
Unityをたちあげ、新規で３Dのプロジェクトを開く。

地面を配置。
Hierarchy > 3DObject > Plane
[![Image from Gyazo](https://i.gyazo.com/06bbddc854a0a15b9041f960e1b2d4a6.png)](https://gyazo.com/06bbddc854a0a15b9041f960e1b2d4a6)


AssetStoreから
Unity-Chan!Model
をダウンロード＆インポートする。

[![Image from Gyazo](https://i.gyazo.com/cecb9079242847e94006873a021f7197.png)](https://gyazo.com/cecb9079242847e94006873a021f7197)



Project > Asset ＞UnityChan! > UnityChan!Model > Prefabs
にあるunitychan_dynamic をシーンにドラッグする。
（２つユニティちゃんのPrefabがあるが、dynamicの方が新しいらしいので、dynamicにした）
[![Image from Gyazo](https://i.gyazo.com/1bd5b3af1b38bf1a242793273ca4cf5a.png)](https://gyazo.com/1bd5b3af1b38bf1a242793273ca4cf5a)


Play

[![Image from Gyazo](https://i.gyazo.com/82037cb011af9728f4c3f1a25510a449.png)](https://gyazo.com/82037cb011af9728f4c3f1a25510a449)

おっと、
ユニティちゃんが後ろ向きなので、RotationのYを180にセット。
[![Image from Gyazo](https://i.gyazo.com/851b76c11860f271e462bec8cb4137a2.png)](https://gyazo.com/851b76c11860f271e462bec8cb4137a2)

再度、Playすると、正面向いた。
[![Image from Gyazo](https://i.gyazo.com/6b96d80b6595a43c7ddc7ffa3589c044.png)](https://gyazo.com/6b96d80b6595a43c7ddc7ffa3589c044)





UNityちゃんを選択した状態で
inspector > Add Component 
RigidbodyとCapsule Colliderを追加


[![Image from Gyazo](https://i.gyazo.com/416dfdd2088f4fe672f8f62de7677fe4.png)](https://gyazo.com/416dfdd2088f4fe672f8f62de7677fe4)


使わないので、
unitychanのInspectorの Idle Changer、Face Update、Auto Blinkのチェックをはすず。（または削除する）



##アニメーション

Project > Asset ＞UnityChan! > UnityChan!Model > Art > Animations >　Animators

で

project + 
Animation Controller

できたファイルをクリック

名前を Walkとする。（なんでもいい）

こんな画面

[![Image from Gyazo](https://i.gyazo.com/b99c7140e3d34d894630a771c697ed5a.png)](https://gyazo.com/b99c7140e3d34d894630a771c697ed5a)

画面を右クリック
Create State > Empty

New State があらわれる
[![Image from Gyazo](https://i.gyazo.com/9f712f0f2d0d696df91ce315a6443580.png)](https://gyazo.com/9f712f0f2d0d696df91ce315a6443580)

名前を Idle  に変更し、
Motionを　WAIT00を選ぶ　（なんでもいいけど）

[![Image from Gyazo](https://i.gyazo.com/6a260c41d2ca994525f32669bd893b7e.png)](https://gyazo.com/6a260c41d2ca994525f32669bd893b7e)

 
新しく
画面を右クリック
Create State > Empty

名前をWalk、MotionをWALK00_F

[![Image from Gyazo](https://i.gyazo.com/b6008d531cc325b5d9c14d6237c1a949.png)](https://gyazo.com/b6008d531cc325b5d9c14d6237c1a949)


IdleとWalkの間に双方向の矢印
（右クリック Make Transition）

[![Image from Gyazo](https://i.gyazo.com/1f2dcb23cf775f7553cfc519eeb56308.png)](https://gyazo.com/1f2dcb23cf775f7553cfc519eeb56308)

parameterの右下にある　＋をクリック
[![Image from Gyazo](https://i.gyazo.com/1a4914f34220e33086af0423a665d190.png)](https://gyazo.com/1a4914f34220e33086af0423a665d190)

Boolを選択

Idel -> Walkの　矢印をアクティブにしたまま、

１、名前を is_walking、
２、Has Exit Timeのチェックを外す
（なぜかわからないけど、チェックがあると、スムーズに歩き出さない）
３、conditions を is_walking trueに

[![Image from Gyazo](https://i.gyazo.com/88225feec0c99ae09953f6336fa6920c.png)](https://gyazo.com/88225feec0c99ae09953f6336fa6920c)

Walk -> Idle の
conditions を is_walking falseに

[![Image from Gyazo](https://i.gyazo.com/2b0955cf442b359d27f9b8eab0cbe440.png)](https://gyazo.com/2b0955cf442b359d27f9b8eab0cbe440)

UnityChanの Inspectorの
Animator > Controller を
先ほど作った　Walkに
[![Image from Gyazo](https://i.gyazo.com/b891569aa2c6afd14d19bd5fd107c55f.png)](https://gyazo.com/b891569aa2c6afd14d19bd5fd107c55f)

##スクリプト



```Walk.cs

using UnityEngine;
using System.Collections;

public class Walk : MonoBehaviour
{

    private Animator animator;
    // Use this for initialization
    void Start()
    {
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey("up"))
        {
            transform.position += transform.forward * 0.005f;
            animator.SetBool("is_walking", true);
        }
        else if(Input.GetKey("down"))
        {
            transform.position -= transform.forward * 0.005f;
            animator.SetBool("is_walking", true);
        }
        else
        {
            animator.SetBool("is_walking", false);
        }
        if (Input.GetKey("right"))
        {
            transform.Rotate(0, 0.2f, 0);
        }
        if (Input.GetKey("left"))
        {
            transform.Rotate(0, -0.2f, 0);
        }
    }

   

}

```

このスクリプトをUnityChanにアタッチする。

[![Image from Gyazo](https://i.gyazo.com/f6212cbd7e26a8f0d583a5592ca62775.png)](https://gyazo.com/f6212cbd7e26a8f0d583a5592ca62775)


プレイ

ユニティちゃんが、キー操作で歩いた！
[![Image from Gyazo](https://i.gyazo.com/29ea0b872e46e1cacbb5fc24ad82091c.gif)](https://gyazo.com/29ea0b872e46e1cacbb5fc24ad82091c)



##カメラ追随

メインカメラをUnityChanの子オブジェクトにする。

[![Image from Gyazo](https://i.gyazo.com/d02239b2f0a8cdfae7dda79dbca071d4.png)](https://gyazo.com/d02239b2f0a8cdfae7dda79dbca071d4)

カメラの位置を合わせる。
Rotaionも合わせたらいいと思う。（これは ROTAION X：10, Y：0,　Z：0）
[![Image from Gyazo](https://i.gyazo.com/e7cbe470cd1057da26f177c0010f713b.png)](https://gyazo.com/e7cbe470cd1057da26f177c0010f713b)

<br>
できた。

[![Image from Gyazo](https://i.gyazo.com/5fd8b0001a3e9f96b4abdd2be90bb306.gif)](https://gyazo.com/5fd8b0001a3e9f96b4abdd2be90bb306)