🥺

VRM1.0表情変更スクリプト

2024/07/14に公開

VRM1.0の顔面の表情についてです。

公式のページより

表情

https://vrm.dev/en/univrm1/vrm1_tutorial/expression/

目線

https://vrm.dev/en/univrm1/vrm1_tutorial/lookat/

プログラム

表情のキーの確認でコンパイルだけ通しました。
それぞれの表情にweightは0.0〜1.0を設定し適切なタイミングで変えてください。
表情が崩れないように制御(Override)する仕組みがあるので、組み合わせによっては変わらない場合もあります。
なお、ここでは標準の表情のみでカスタムのは扱いません。

public class MyExpressions : MonoBehaviour
{
    // Vrm10Instanceはvrm10にアッタッチされてる。
    [SerializeField] private Vrm10Instance vrm;
    private Vrm10RuntimeExpression vrm10RuntimeExpression;


    void Start()
    {
        vrm10RuntimeExpression = vrm.Runtime.Expression;
        // 感情
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Happy, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Angry, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Sad, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Relaxed, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Surprised, 1f);
        // 視線
        vrm10RuntimeExpression.SetWeight(ExpressionKey.LookUp, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.LookDown, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.LookLeft, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.LookRight, 1f);
        // 瞬き
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Blink, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.BlinkLeft, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.BlinkRight, 1f);
        // 口(リップシンク)
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Aa, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Ih, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Ou, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Ee, 1f);
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Oh, 1f);
        // 後方互換性のため
        vrm10RuntimeExpression.SetWeight(ExpressionKey.Neutral, 1f);
    }
}

Discussion