diff --git a/Packages/nadena.dev.modular-avatar/Editor/PreventStripTagObjects.cs b/Packages/nadena.dev.modular-avatar/Editor/PreventStripTagObjects.cs new file mode 100644 index 00000000..f16c0df9 --- /dev/null +++ b/Packages/nadena.dev.modular-avatar/Editor/PreventStripTagObjects.cs @@ -0,0 +1,59 @@ +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using VRC.SDKBase; +using VRC.SDKBase.Editor.BuildPipeline; + +namespace nadena.dev.modular_avatar.core.editor +{ + /// + /// See https://feedback.vrchat.com/sdk-bug-reports/p/ieditoronly-components-should-be-destroyed-late-in-the-build-process + /// + [InitializeOnLoad] + internal static class PreventStripTagObjects + { + static PreventStripTagObjects() + { + EditorApplication.delayCall += () => + { + var f_callbacks = typeof(VRCBuildPipelineCallbacks).GetField("_preprocessAvatarCallbacks", + BindingFlags.Static | BindingFlags.NonPublic); + var callbacks = (List) f_callbacks.GetValue(null); + + var filteredCallbacks = callbacks.Where(c => !(c is RemoveAvatarEditorOnly)).ToList(); + + f_callbacks.SetValue(null, filteredCallbacks); + }; + } + } + + internal class ReplacementRemoveAvatarEditorOnly : IVRCSDKPreprocessAvatarCallback + { + public int callbackOrder => -1024; + + public bool OnPreprocessAvatar(GameObject avatarGameObject) + { + foreach (var xform in avatarGameObject.GetComponentsInChildren(true)) + { + if (xform != null && xform.CompareTag("EditorOnly")) + { + Object.DestroyImmediate(xform.gameObject); + } + } + + foreach (var editoronly in avatarGameObject.GetComponentsInChildren(true)) + { + if (editoronly == null || editoronly is AvatarTagComponent) + { + continue; + } + + Object.DestroyImmediate((Component) editoronly); + } + + return true; + } + } +} \ No newline at end of file diff --git a/Packages/nadena.dev.modular-avatar/Editor/PreventStripTagObjects.cs.meta b/Packages/nadena.dev.modular-avatar/Editor/PreventStripTagObjects.cs.meta new file mode 100644 index 00000000..a9c65cd8 --- /dev/null +++ b/Packages/nadena.dev.modular-avatar/Editor/PreventStripTagObjects.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eb8f842fbf1e4efdaf940eaf12cbbbb1 +timeCreated: 1681553175 \ No newline at end of file