Candy Rock Star 모델 변경 방법

14187 단어 Unity

하고 싶은 일



직접 만든 vroid를 Candy Rock Star의 무대에서 춤추고 싶습니다.

환경



유니티 버전 2020.3.18f1

참고한 기사



매우 이해하기 쉬운 기사가 ​​있습니다.

잘 된 곳을 제거합니다.



FocusObj 설정



이 설정이 없으면 오류가 발생하여 실행할 수 없었습니다. 우선 모델의 선두에 설정.


MusicStartar 추가



이 설정이 없으면 오류가 발생하여 실행할 수 없었습니다. 사쿠토 추가.




소스 수정



이쪽은 에러가 나오지 않는데 제대로 움직이지 않았다. 버전이 올라가서 쓰는 방법이 바뀐 모양.

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();
    }
}

이것으로 무사히 춤을 추었습니다!

좋은 웹페이지 즐겨찾기