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になるわけでもないから、そういう設計にはしないのかもしれない。