From b7b4fde863ca680c5c24729ee2122ecdef830f66 Mon Sep 17 00:00:00 2001 From: bd_ Date: Fri, 9 Dec 2022 11:40:07 -0800 Subject: [PATCH] Fix NRE caused by missing root bone (#149) Fixes: #135 --- .../Editor/MeshRetargeter.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Packages/nadena.dev.modular-avatar/Editor/MeshRetargeter.cs b/Packages/nadena.dev.modular-avatar/Editor/MeshRetargeter.cs index ae4de30d..a95b089f 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/MeshRetargeter.cs +++ b/Packages/nadena.dev.modular-avatar/Editor/MeshRetargeter.cs @@ -197,14 +197,24 @@ namespace nadena.dev.modular_avatar.core.editor newBindPoses[i] = Bp; } + var rootBone = renderer.rootBone; + var scaleBone = rootBone; + if (rootBone == null) + { + // Sometimes meshes have no root bone set. This is usually not ideal, but let's make sure we don't + // choke on the scale computation below. + scaleBone = renderer.bones[0]; + } + dst.bindposes = newBindPoses; renderer.bones = newBones; renderer.sharedMesh = dst; - var newRootBone = BoneDatabase.GetRetargetedBone(renderer.rootBone, true); + var newRootBone = BoneDatabase.GetRetargetedBone(rootBone, true); + var newScaleBone = BoneDatabase.GetRetargetedBone(scaleBone, true); - var oldLossyScale = renderer.rootBone.transform.lossyScale; - var newLossyScale = newRootBone.transform.lossyScale; + var oldLossyScale = scaleBone.transform.lossyScale; + var newLossyScale = newScaleBone.transform.lossyScale; var bounds = renderer.localBounds; bounds.extents = new Vector3(