トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

VRM1.0のアバターの表情をスクリプトから変更する

ドキュメントどこだ・・・?これか?でもvrm1.0ではなさそう

vrm.dev

vrm.dev

検索したらいろいろ一般の方の記事は出る

note.com

Vrm10RuntimeExpressionで変更するらしいが、これを検索しても公式ドキュメントみたいなのが出てこない

でもこれでよさそう

[SerializeField] private Vrm10Instance vrmInstance;

private Vrm10RuntimeExpression vrmRuntimeExpression;

void Start(){

vrmRuntimeExpression = vrmInstance.Runtime.Expression;

//表情変える

vrmRuntimeExpression.SetWeight(ExpressionKey.Blink, 1.0f);

}

目をつぶった~

この情報を与えて、ChatGPTに瞬きするスクリプトを作ってもらった。ちなみにこの情報を与えないと正しくvrm1.0で動くスクリプト作ってくれなかった。

 

using UnityEngine;
using UniVRM10;
using System.Collections;

public class vrm10expressionchange : MonoBehaviour
{
    [SerializeField] private Vrm10Instance vrmInstance;
    private Vrm10RuntimeExpression vrmRuntimeExpression;

    [SerializeField] private float blinkInterval = 3.0f; // 瞬きの間隔(秒)
    [SerializeField] private float blinkDuration = 0.1f; // 瞬きの持続時間(秒)

    private float nextBlinkTime = 0.0f; // 次の瞬きのタイミング

    void Start()
    {
        vrmRuntimeExpression = vrmInstance.Runtime.Expression;
    }

    void Update()
    {
        if (Time.time >= nextBlinkTime)
        {
            StartCoroutine(Blink());
            nextBlinkTime = Time.time + blinkInterval;
        }
    }

    IEnumerator Blink()
    {
        vrmRuntimeExpression.SetWeight(ExpressionKey.Blink, 1.0f);
        yield return new WaitForSeconds(blinkDuration);
        vrmRuntimeExpression.SetWeight(ExpressionKey.Blink, 0.0f);
    }
}

 

これで瞬きできるようになった。