Open3
DVRSDKで作成したアプリをVRM1.0に対応させる
目的
- VRM0.xを導入したアプリで、DVRSDKを導入していた。2022/9にVRM1.0へのアップデートが行われるということで、DVRSDKの方も対応が必要
- DVRSDKは開発が終了していると思われるが、キャリブレーション周りでお世話になっているのでそのまま対応できればと思っている
まずやったこと
- VRM0.x時点のUniVRMをプロジェクトから削除し、VRM1.0に対応したUniVRMを読み込む(UniVRMではなくVRMという名前になるかな)
- namespaceのエラーがメインの大量のエラーが出力される
using VRMの解消
これを以下のようにに変更
// 変更前
using VRM;
// 変更後
using UniVRM10;
VRMFirstPersonの解消
変更対象ファイル: Assets/DVRSDK/DVRAvatarCalibrator/Scripts/Tracking/FinalIKCalibrator.cs
これを以下のように変更
参考ファイル: Assets/VRM10/Runtime/Components/FirstPerson/Vrm10FirstPersonLayerSettings.cs
// 変更前
VRMFirstPerson.THIRDPERSON_ONLY_LAYER
// 変更後
Vrm10FirstPersonLayerSettings.DEFAULT_THIRDPERSON_ONLY_LAYER
VRMFirstPersonの廃止により
変更対象ファイル: Assets/DVRSDK/DVRAvatarCalibrator/Scripts/Tracking/FinalIKCalibrator.cs
// 変更前
var vrmFirstPerson = currentModel.GetComponent<VRMFirstPerson>();
var firstPersonTarget = new GameObject("FirstPersonTarget");
GeneratedGameObjects.Add(firstPersonTarget);
firstPersonTarget.transform.SetParent(vrmFirstPerson.FirstPersonBone, false);
// 変更後
var vrmFirstPerson =animator.GetBoneTransform(HumanBodyBones.Head);
var firstPersonTarget = new GameObject("FirstPersonTarget");
GeneratedGameObjects.Add(firstPersonTarget);
firstPersonTarget.transform.SetParent(vrmFirstPerson, false);
VRMFirstPerson.FirstPersonOffsetが廃止された
// NOTE: VRM 1.0 では firstPersonBone は廃止され, Head Bone 固定になります.
// NOTE: VRM 1.0 では firstPersonBoneOffset は FirstPerson 拡張ではなく LookAt 拡張の OffsetFromHeadBone に移行します.
// 変更前
// FirstPersonOffsetがデフォルト値の時は参考にならないのでそれっぽい目の位置を設定する
if (vrmFirstPerson.FirstPersonOffset == new Vector3(0, 0.06f, 0))
{
vrmFirstPerson.FirstPersonOffset = new Vector3(0, 0.04f, 0.085f);
}
firstPersonTarget.transform.localPosition = vrmFirstPerson.FirstPersonOffset;
// 変更後
// offsetFromHeadがデフォルト値の時は参考にならないのでそれっぽい目の位置を設定する
Vector3 offsetFromHead = currentModel.GetComponent<Vrm10Instance>().Vrm.LookAt.OffsetFromHead;
if (offsetFromHead == new Vector3(0, 0.06f, 0))
{
offsetFromHead = new Vector3(0, 0.04f, 0.085f);
}
firstPersonTarget.transform.localPosition = offsetFromHead;