Final IKを使わずにバーチャルユーチューバーっぽいこと


#やらなければ、はじまらない…
##使ったもの
- HTC Vive
- Unity(5.6.3p2)
    - [SteamVR Plugin](https://www.assetstore.unity3d.com/jp/#!/content/32647)
    - [UnityChan](http://unity-chan.com/)
    - [Mecanim Example Scenes](https://www.assetstore.unity3d.com/jp/#!/content/5328)
    - [OVRLipSync(1.16.0)](https://developer.oculus.com/downloads/package/oculus-lipsync-unity/)
- SteamVR

##参考にしたページ
- [バーチャルYouTuberのやり方](http://greety.sakura.ne.jp/redo/2018/01/how-to-vtuber.html)
- [IKを試してみよう！ 導入編](http://onoty3d.hatenablog.com/entry/2015/03/16/183650)
- [Unity でリップシンクができる OVRLipSync を試してみた](http://tips.hecomi.com/entry/2016/02/16/202634)

#準備
各種Assetを手に入れます
![screenshot.17.png](https://qiita-image-store.s3.amazonaws.com/0/230180/320fb95e-3e77-0411-81f8-23f9eeabcb1c.png)
![screenshot.18.png](https://qiita-image-store.s3.amazonaws.com/0/230180/9a368fba-2bfe-6831-174e-8d8cdb7e4f8d.png)
インポートします
![screenshot.20.png](https://qiita-image-store.s3.amazonaws.com/0/230180/d82b13d7-e9c4-0a34-19ac-70d2313da601.png)
Mecanim Example Scenesの中で今回用いるのはScripts -> IK.csだけです

Unityちゃんはページ右上のData Downloadをクリックするとガイドラインが表示されるので、よく読んで同意して次のページへ
![screenshot.21.png](https://qiita-image-store.s3.amazonaws.com/0/230180/edd20210-02d2-72d3-0086-37dedc713761.png)
今回は1.2.1を使いました

OVRLipSyncも同様です
![screenshot.22.png](https://qiita-image-store.s3.amazonaws.com/0/230180/37ba000c-4608-220b-bbd7-dcf971fe931a.png)

それぞれ.unitypackageがダウンロードできるので
メニューバーのAssets -> Import Package -> Custom Package...
から選択してインポートします

SteamVR Pluginはプロジェクト設定を変更するので、最後がいいと思います
![screenshot.23.png](https://qiita-image-store.s3.amazonaws.com/0/230180/ad1cf715-a805-3aee-d322-8f0b34fc1687.png)
![screenshot.25.png](https://qiita-image-store.s3.amazonaws.com/0/230180/979ac57b-201a-57ed-9885-963e4ab0f31a.png)
インポートすると出ますが、これもそのままAccept Allします

アセットの
UnityChan -> Prefabs -> unitychan
SteamVR -> Prefabs -> [SteamVR]
SteamVR -> Prefabs -> [CameraRig]
をそれぞれHierarchyにドラッグ＆ドロップ
この時点でViveヘッドセットでカメラを動かし、Unityちゃんを眺められます
![screenshot.26.png](https://qiita-image-store.s3.amazonaws.com/0/230180/40971de7-406c-7f38-9592-3a302af50fea.png)

##手を動かす
空のGameObjectを二つ作成し(Create Empty)
[CameraRig] -> Controller(left)
[CameraRig] -> Controller(right)
以下に配置します
配置した後、positionの数字を 0 0 0 に直しておいてください
![screenshot.27.png](https://qiita-image-store.s3.amazonaws.com/0/230180/07442db6-7269-f1f4-0fb8-bb9c14448b5a.png)
名前をIK_LeftHandとIK_RightHandに変えてあります

unitychanにScripts -> IKをアタッチして、Inspectorの設定からこの二つのオブジェクトを指定します
![screenshot.28.png](https://qiita-image-store.s3.amazonaws.com/0/230180/f919c9c1-cd11-150d-ec9f-76ab70717038.png)
コントローラーで手を動かせるようになりました、Controlloer -> modelを消せばコントローラーが非表示になります

##頭を動かす
空のGameObjectを作成し
[CameraRig] -> Camera(head) -> Camera(eye)
以下に配置します
配置した後、positionの数字を 0 0 1 に直しておいてください
![screenshot.29.png](https://qiita-image-store.s3.amazonaws.com/0/230180/874f463e-1092-003c-310f-082fe3bf2af1.png)
名前をIK_LookAtに変えてあります
unitychanのScripts -> IKにある、Inspectorの設定からこのオブジェクトを指定します
このままでも頭は動きますが、カメラ位置と頭の位置が違うので、これを直します

```c#:scripts.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Script : MonoBehaviour {

    public Transform Camera;
    public Transform Unitychan;
    public Transform Head;

	void Update () {
        Unitychan.position = Camera.position - (Head.position - Unitychan.position);
	}
}
```

適当なゲームオブジェクトを作成してスクリプトをアタッチ
![screenshot.30.png](https://qiita-image-store.s3.amazonaws.com/0/230180/47ffffff-1d8f-2e83-c02f-4b94a929da74.png)
Cameraには[Camerarig] -> Camera(head) -> camera(eye)
Unitychanにはunitychan
HeadにはUnitychan -> Reference -> Spine -> Spine1 -> Spine2 -> Neck -> Head

これで君もUnitychan! kawaii!
<blockquote class="twitter-video" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/h02UdVz97k">pic.twitter.com/h02UdVz97k</a></p>&mdash; ほりし (@trg17579) <a href="https://twitter.com/trg17579/status/950647146197393408?ref_src=twsrc%5Etfw">2018年1月9日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

###これから
- 口動かしたい
- 地に足つけたい
- 表情変えたい
- Final IK買う