VRCで座った人を踊らせる椅子をアバターに仕込む

# 前提知識
* Unityの基本的な操作
* 購入アセットのインストール方法
* カスタムオーバーライドでオブジェクトの出し入れをするヤツ（出し入れする場合のみ）

# 必要なもの
以下のものをプロジェクトに用意しておいてください。 

* VRCSDK
* お好きなアバター
* 仕込むアニメーション
* FinalIK（有料）

# やりたいこと
* Sitした他のプレイヤーを踊らせる

# なぜやろうと思ったか
近頃Sitしたプレイヤーを踊らせるギミックが仕込まれたパブリックアバターをよく見かけるため。
ぜひその仕組みを知りたい…！という知的好奇心もあり。

# 手順
大まかな手順は以下の通り。

1. 椅子の作成
2. Animationファイルの編集
3. アニメーションを椅子へ適用
4. アニメーション椅子をアバターに仕込む

## 1. 椅子の作成
椅子はVRC_Stationを使うと作れます。
VRCSDKのパッケージの中に入っているサンプルの椅子を使っても良いですが、
アバターに仕込めないスクリプトは削除しましょう。

今回はCubeを使うことにしました。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/02b2f103-1155-77fa-6674-87bad60e2d31.png)

Box ColliderはRemoveしましょう。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/e99393dd-bafc-9b07-d454-5dc77660fd90.png)

このような状態にしておきます。
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/d8184d51-29b6-3f38-2584-28d9eab6f1ff.png)


## 2. Animationファイルの編集
次にAnimationファイル（踊らせるモーション）を編集し、以下の2つのスクリプトを無効にするキーを打ちます。
両方ともFinalIKに入っているスクリプトです。

* VRIK (3点トラッキング用)
* Full Body Biped IK (フルトラ用)

今回はCLAZYさんの[Runner Action Animation Pack](https://assetstore.unity.com/packages/3d/animations/runner-action-animation-pack-153906)をお借りしました。
（有料ですがBlack Fridayで半額です！クールなモーションが大量に入ってます！オススメ！）

まずは適当なGameObjectを作成します。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/eee62c4b-3f81-d6d6-1d83-fa4f3e7029be.png)

作成したGameObjectにVRIKとFull Body Biped IKを追加します。
以下のような状態になります。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/cd14d9d8-aebc-87de-3252-517cc0d5fd32.png)

GameObjectに踊らせるモーションのアニメーションファイルをドラッグ&ドロップします。
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/26c7e06c-7dda-a80e-dd81-459fca3af5bf.png)

GameObjectを選択した状態でAnimationウィンドウを開き、VRIKとFull Body Biped IKを無効にするキーを打ちます。
黄色くなっているヤツは気にしなくて良いです。
![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/61041f24-a6f4-931e-89e6-06101f1bf449.png)

以下のような状態になります。
アニメーションの最初から最後まで、2つのスクリプトがオフになるように設定してください。
![8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/767d0cb8-af80-57ca-6309-acabefcdb5ba.png)

なお、座っている間ループしていてほしいので、Loop Timeにチェックを入れてあります。
これはアニメーションファイルを選択した状態でInspectorから設定できます。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/82766e36-0b59-73fc-78f2-48e1e2d0ad29.png)

## 3. アニメーションを椅子へ適用
アニメーションを椅子に設定します。
`Assets/VRCSDK/Example/Sample Assets/Animation`から、AvaterControllerTPose.controllerをひったくってきます。
`Ctrl+D`で複製などして使うと良いと思います。

ひったくってきました。
![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/28389edf-b45f-a668-8587-eb20e65a1167.png)

ひったくってきたAvaterControllerTPoseを選択した状態で、Animatorウィンドウを開いてください。
Entryから矢印が伸びてTPoseがつながっていると思います。
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/3c1cc22e-c853-4d14-6d57-1e9be43b4910.png)

TPoseをクリックしてください。
Inspector内に出てくる設定画面のMotionを、手順2で編集したアニメーションに差し替えます。
![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/249d3274-98b8-6d1d-3174-3594e979274c.png)

手順1で作成したCubeのVRC_StationにAvaterControllerTPoseを設定します。
VRC_StationのAnimator ControllerのNoneってなってるところにAvaterControllerTPoseをドラッグ&ドロップします。
![13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/d9e647d3-b535-c576-ce43-6b9f8b62405d.png)

プレイヤーが座ったときのトランスフォームと離席したときのトランスフォームを設定します。
Cubeの子供に空のGameObjectを作成して、Locationという名前をつけましました。
これを設定したいと思います。
![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/d5d4b774-292d-466b-3b6d-60bd7df74975.png)

最終的にこのような状態になりました。
ScaleとPositionは適当に調整しました。
![15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/b21d4cc4-cf33-5e6f-ed85-091a43a22a5e.png)


これで椅子の設定は終わりです。

## 4. アニメーション椅子をアバターに仕込む
アバターにアイテムを仕込むときと一緒の手順です。
私はアバターの直下に入れてます。
![16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436991/cbcfae3b-6114-a935-2f93-5b247b4e33cb.png)

あとはマテリアルを作ってCubeを装飾したり、
カスタムオーバーライドを設定して出し入れしたり出来るように設定すれば完成です:clap:

# 所感
入れるモーションによっては視界が大変荒ぶるので、一度テスト用ワールドを作って自分で座ってみたほうが良いです。
あと、VRIKとFullBodyBipedIKをオフにするためだけにFinalIKを買うのか？と聞かれると何も言えねえです。
大いなる目的をもってFinalIKを購入したついでにでも試してみると良いです。

# 参考文献
https://vrcworld.wiki.fc2.com/wiki/VRC_Station