From 5af7c58febddd5df6e42fa639731d10f5a8a2b6a Mon Sep 17 00:00:00 2001 From: kaikoga Date: Sun, 22 Oct 2023 07:21:17 +0900 Subject: [PATCH] support VRM0 SpringBone --- .../OptimizationPasses/GCGameObjectsPass.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Editor/OptimizationPasses/GCGameObjectsPass.cs b/Editor/OptimizationPasses/GCGameObjectsPass.cs index 33e0689f..d08761bb 100644 --- a/Editor/OptimizationPasses/GCGameObjectsPass.cs +++ b/Editor/OptimizationPasses/GCGameObjectsPass.cs @@ -7,6 +7,10 @@ using UnityEngine; using VRC.SDK3.Dynamics.PhysBone.Components; #endif +#if MA_VRM0 +using VRM; +#endif + namespace nadena.dev.modular_avatar.core.editor { /// @@ -66,6 +70,13 @@ namespace nadena.dev.modular_avatar.core.editor break; #endif +#if MA_VRM0 + case VRMSpringBone sb: + MarkObject(obj); + MarkSpringBone(sb); + break; +#endif + case AvatarTagComponent _: // Tag components will not be retained at runtime, so pretend they're not there. break; @@ -147,6 +158,22 @@ namespace nadena.dev.modular_avatar.core.editor } #endif +#if MA_VRM0 + private void MarkSpringBone(VRMSpringBone sb) + { + foreach (var rootBone in sb.RootBones) + { + foreach (var obj in GameObjects(rootBone.gameObject)) + { + MarkObject(obj); + } + } + + // Mark etc + MarkAllReferencedObjects(sb); + } +#endif + private void MarkAllReferencedObjects(Component component) { var so = new SerializedObject(component);