VRC Expression Parameters をテキストファイルから追加する

VRC Expressions と Animator の双方のパラメータの名前が一致していなければならないが、手動でパラメータを追加するとミスが生じる。また、パラメータが 60 個以上あれば、全て追加するのに 30 分はかかってしまう。そのため、テキストファイルに列記したパラメータを読み込み、VRC Expressions と Animator の双方に追加するスクリプトを用意して実行する。

スクリプト

using UnityEngine;
using ExpressionParameters = VRC.SDK3.Avatars.ScriptableObjects.VRCExpressionParameters;
using ExpressionParameter = VRC.SDK3.Avatars.ScriptableObjects.VRCExpressionParameters.Parameter;

public class AddAnimatorParamFromTextFile : MonoBehaviour
{
    public TextAsset TextAsset;
    public ExpressionParameters Parameters;
    public UnityEditor.Animations.AnimatorController Controller;

    [ContextMenu("AddParamsFromTextFile")]
    public void AddParamsFromTextFile()
    {
        //テキストファイルの各行を配列に格納する
        string[] lines = TextAsset.text.Split(char.Parse("\n"));

        //VRC側のパラメータの配列をnewする
        Parameters.parameters = new ExpressionParameter[3 + lines.Length];
        for (int i = 0; i < Parameters.parameters.Length; i++)
        {
            Parameters.parameters[i] = new ExpressionParameter();
        }

        //VRC側のデフォルトパラメータをセットする
        Parameters.parameters[0].name = "VRCEmote";
        Parameters.parameters[0].valueType = ExpressionParameters.ValueType.Int;
        Parameters.parameters[1].name = "VRCFaceBlendH";
        Parameters.parameters[1].valueType = ExpressionParameters.ValueType.Float;
        Parameters.parameters[2].name = "VRCFaceBlendV";
        Parameters.parameters[2].valueType = ExpressionParameters.ValueType.Float;

        for (int i = 0; i < lines.Length; i++)
        {
            //空行ならスキップする
            if (lines[i] == "") continue;

            //VRC側のパラメータを追加してゆく
            Parameters.parameters[3 + i].name = lines[i];
            Parameters.parameters[3 + i].valueType = ExpressionParameters.ValueType.Bool;

            //アニメーター側のパラメータに重複があればスキップする
            bool isSameName = false;
            foreach (AnimatorControllerParameter parameter in Controller.parameters)
            {
                if (lines[i] == parameter.name) isSameName = true;
            }
            if (isSameName == true) continue;

            //アニメーター側のパラメータを追加してゆく
            Controller.AddParameter(lines[i], AnimatorControllerParameterType.Bool);
        }
    }
}

手順

  • テキストファイルにパラメータの名前を列記する

  • Assets の適当なフォルダにテキストファイルを格納する(参考画像内①)
  • 「AddAnimatorParamFromTextFile」という名前で C# スクリプトを作成する(参考画像内②)
  • C# スクリプトをダブルクリックしてエディタを開き、上記のコードをコピペして、上書き保存する
  • Scene に GameObject を新規作成する(参考画像内③)
  • GameObject にスクリプトをドラッグ&ドロップする(参考画像内④)
  • 変数をセットする(参考画像内⑤)
    • Text Asset には、テキストファイルをドラッグ&ドロップする
    • Parameters には、VRC Expression Parameters をドラッグ&ドロップする
    • Controller には、Animator をドラッグ&ドロップする
  • 三点リーダをクリックする(参考画像内⑥)
  • 「AddParamsFromTextFile」をクリックする(参考画像内⑦)

所感

VRCSDKにて、Animator の パラメータ を VRC Expressions に取り込む機能をつけてほしいが、必ずしも Animator と VRC Expressions が1対1になるわけでもないから、そういう設計にはしないのかもしれない。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です