Candy Rock Star モデル変更方法

##やりたいこと
自分で作ったvroidをCandy Rock Starのステージで踊らせたい

##環境
unity version 2020.3.18f1

##参考にした記事
とてもとても分かりやすい記事があります。

https://qiita.com/VirtualDollRio/items/ccd8026617a772d1ee9d#%E3%83%A6%E3%83%8B%E3%83%86%E3%82%A3%E3%81%A1%E3%82%83%E3%82%93%E3%83%A9%E3%82%A4%E3%83%96%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8--candy-rock-star--%E5%B0%8E%E5%85%A5

##うまくいかなったところを解消
####FocusObj設定
この設定がないとエラーが出て実行できなかった。とりあえずモデルの先頭に設定。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85010/ea14a825-0633-8e61-d1f4-58cbda0efd4a.png)

###MusicStartar追加
この設定がないとエラーが出て実行できなかった。さくっと追加。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85010/9ac40f13-fe3f-5d58-2da3-e0b2a82b0279.png)

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85010/ef33544d-a401-c8ad-938a-560afd10eb11.png)

###ソース修正
こちらはエラーが出ないのにちゃんと動かなかった。バージョンが上がって書き方が変わった模様。

```FaceChanger.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRM;

public class FaceChanger : MonoBehaviour
{
    VRMBlendShapeProxy proxy;

    void Start()
    {
        proxy = GetComponent<VRMBlendShapeProxy>();
    }

    //表情を変えるイベントをここで受け取る．
    public void OnCallChangeFace(string str)
    {
        switch (str)
        {                                    //受け取ったメッセージが
            case "eye_close@unitychan":      //「目を閉じる」であれば
                proxy.SetValues(new Dictionary<BlendShapeKey, float>
                { {BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 1f } });   // 瞬き
                break;
            case "smile3@unitychan":                    //「笑顔」であれば
                proxy.SetValues(new Dictionary<BlendShapeKey, float>
                { {BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), 1f } });   // 喜
                break;
            case "conf@unitychan":                      //「困惑」であれば
                proxy.SetValues(new Dictionary<BlendShapeKey, float>
                { {BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), 1f } });   // 怒
                break;
            case "default@unitychan":                   //それ以外なら
                proxy.SetValues(new Dictionary<BlendShapeKey, float>
                {
                    {BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 0f } ,
                    {BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), 0f } ,
                    {BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), 0f } ,
                });   //すべてリセット
                break;
        }
    }
}
```

```LipSyncController.cs
using UnityEngine;
using System.Collections;
using VRM;

public class LipSyncController : MonoBehaviour
{
    public string targetName;

    public Transform nodeA;
    public Transform nodeE;
    public Transform nodeI;
    public Transform nodeO;
    public Transform nodeU;

    public AnimationCurve weightCurve;

    VRMBlendShapeProxy target;

    void Start()
    {
        target = GameObject.Find(targetName).GetComponent<VRMBlendShapeProxy>();
    }

    float GetWeight(Transform tr)
    {
        return weightCurve.Evaluate(tr.localPosition.z);
    }

    void LateUpdate()
    {
        Debug.Log("LipSyncController#LateUpdate:");

        var total = 1.0f;

        var w = total * GetWeight(nodeA);
        target.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.A), w);
        total -= w;

        w = total * GetWeight(nodeI);
        target.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.I), w);
        total -= w;

        w = total * GetWeight(nodeU);
        target.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.U), w);
        total -= w;

        w = total * GetWeight(nodeE);
        target.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.E), w);
        total -= w;

        w = total * GetWeight(nodeO);
        target.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.O), w);

        target.Apply();
    }
}
```

###これで無事に踊れました！

https://www.youtube.com/watch?v=SKL46g3trow