ボーンが存在しないSkinnedMeshRendererでRootBoneを設定すると描画位置がずれる問題の修正 (#345)

* Fixed a bug when setting RootBone in SkinnedMeshRenderer with 0 bones.

Co-authored-by: AoiKamishiro <aoi.kamishiro@kamishiro.online>
This commit is contained in:
AoiKamishiro 2023-06-23 19:57:20 +09:00 committed by GitHub
parent 483a8abeae
commit 0e2dd7197d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,5 @@
using UnityEngine;
using System.Linq;
using UnityEngine;
namespace nadena.dev.modular_avatar.core.editor
{
@ -102,6 +103,17 @@ namespace nadena.dev.modular_avatar.core.editor
if (settings.SetBounds && mesh is SkinnedMeshRenderer smr)
{
if (smr.bones.Length == 0 && smr.sharedMesh)
{
Mesh newMesh = Object.Instantiate(smr.sharedMesh);
smr.sharedMesh = newMesh;
smr.bones = new Transform[] { smr.transform };
smr.rootBone = smr.transform;
smr.sharedMesh.boneWeights = Enumerable.Repeat(new BoneWeight() { boneIndex0 = 0, weight0 = 1 }, newMesh.vertexCount).ToArray();
smr.sharedMesh.bindposes = new Matrix4x4[] { smr.transform.worldToLocalMatrix * smr.transform.localToWorldMatrix };
if (newMesh) context.SaveAsset(newMesh);
}
smr.rootBone = settings.RootBone;
smr.localBounds = settings.Bounds;
}