Cannot build avatar due to NotImplementedException / How do I get the Avatar and World SDK3 to work together?

I have a project that has both worlds and Avatars and I can’t seem to get it to work. Every time I try to build an avatar, I get a NotImplementedException.

Here’s the full stack log:

NotImplementedException: The method or operation is not implemented.
VRC.SDK3.Editor.Builder.VRCWorldBuilder.ExportAndUploadAvatarBlueprint (UnityEngine.GameObject externalReference) (at <be4b119cbaf641c5bbcb0a2b43f7ede1>:0)
VRC.SDKBase.Editor.VRC_SdkBuilder.ExportAndUploadAvatarBlueprint (UnityEngine.GameObject externalReference) (at <d2080ee48db249a583c5b1f618449150>:0)
VRC.SDK3.Editor.VRCSdkControlPanelAvatarBuilder3A.OnGUIAvatar (VRC.SDKBase.VRC_AvatarDescriptor avatar) (at Assets/VRCSDK/SDK3A/Editor/VRCSdkControlPanelAvatarBuilder3A.cs:563)
VRC.SDKBase.Editor.VRCSdkControlPanelAvatarBuilder.ShowBuilder () (at Assets/VRCSDK/Dependencies/VRChat/Editor/ControlPanel/VRCSdkControlPanelAvatarBuilder.cs:156)
VRCSdkControlPanel.ShowBuilders () (at Assets/VRCSDK/Dependencies/VRChat/Editor/ControlPanel/VRCSdkControlPanelBuilder.cs:323)
VRCSdkControlPanel.OnGUI () (at Assets/VRCSDK/Dependencies/VRChat/Editor/ControlPanel/VRCSdkControlPanel.cs:200)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <e1319b7195c343e79b385cd3aa43f5dc>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <e1319b7195c343e79b385cd3aa43f5dc>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <e1319b7195c343e79b385cd3aa43f5dc>:0)
UnityEditor.HostView.Invoke (System.String methodName, System.Object obj) (at C:/buildslave/unity/build/Editor/Mono/HostView.cs:342)
UnityEditor.HostView.Invoke (System.String methodName) (at C:/buildslave/unity/build/Editor/Mono/HostView.cs:336)
UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGUIPosition, UnityEngine.Rect viewRect) (at C:/buildslave/unity/build/Editor/Mono/HostView.cs:310)
UnityEditor.DockArea.DrawView (UnityEngine.Rect viewRect, UnityEngine.Rect dockAreaRect, System.Boolean customBorder, System.Boolean floatingWindow, System.Boolean isBottomTab) (at C:/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:361)
UnityEditor.DockArea.OldOnGUI () (at C:/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:320)
UnityEngine.Experimental.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 worldTransform, UnityEngine.Rect clippingRect, System.Boolean isComputingLayout) (at C:/buildslave/unity/build/Modules/UIElements/IMGUIContainer.cs:266)
UnityEngine.Experimental.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e, UnityEngine.Matrix4x4 worldTransform, UnityEngine.Rect clippingRect) (at C:/buildslave/unity/build/Modules/UIElements/IMGUIContainer.cs:438)
UnityEngine.Experimental.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e) (at C:/buildslave/unity/build/Modules/UIElements/IMGUIContainer.cs:421)
UnityEngine.Experimental.UIElements.IMGUIContainer.HandleEvent (UnityEngine.Experimental.UIElements.EventBase evt) (at C:/buildslave/unity/build/Modules/UIElements/IMGUIContainer.cs:401)
UnityEngine.Experimental.UIElements.EventDispatcher.ProcessEvent (UnityEngine.Experimental.UIElements.EventBase evt, UnityEngine.Experimental.UIElements.IPanel panel) (at C:/buildslave/unity/build/Modules/UIElements/EventDispatcher.cs:511)
UnityEngine.Experimental.UIElements.EventDispatcher.Dispatch (UnityEngine.Experimental.UIElements.EventBase evt, UnityEngine.Experimental.UIElements.IPanel panel, UnityEngine.Experimental.UIElements.DispatchMode dispatchMode) (at C:/buildslave/unity/build/Modules/UIElements/EventDispatcher.cs:307)
UnityEngine.Experimental.UIElements.BaseVisualElementPanel.SendEvent (UnityEngine.Experimental.UIElements.EventBase e, UnityEngine.Experimental.UIElements.DispatchMode dispatchMode) (at C:/buildslave/unity/build/Modules/UIElements/Panel.cs:176)
UnityEngine.Experimental.UIElements.UIElementsUtility.DoDispatch (UnityEngine.Experimental.UIElements.BaseVisualElementPanel panel) (at C:/buildslave/unity/build/Modules/UIElements/UIElementsUtility.cs:245)
UnityEngine.Experimental.UIElements.UIElementsUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr) (at C:/buildslave/unity/build/Modules/UIElements/UIElementsUtility.cs:68)
UnityEngine.GUIUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)

Is there any way to get them to work together? In my pipeline, I reuse the models (or at least, decimated versions) inside the world itself as previews and want to avoid having to sync up the model assets between two projects and keep them under the one same project.

Though more specifically: Why is the VRCWorldBuilder trying to build an avatar?

Thanks for any assistance.

No. SDK3 Worlds and SDK3 Avatars aren’t compatible in the slightest.
This is the reason why it even gives you two different sdk’s in the first place, opposed to sdk2.

Add to that, you kind of need to different projects in the first place since you can’t even have an avatar descriptor and world descriptor in the same scene.

However, a viable alternative would be using symbolic links so you can have the specific asset folder containing the models in the other project where you needed. As long as that folder doesn’t contain the scripts needed for avatars it should be fine in the world project…

Sorry for the late reply; SSO isn’t letting me login for some reason.

Add to that, you kind of need to different projects in the first place since you can’t even have an avatar descriptor and world descriptor in the same scene.

Um, why would you assume one would do that? I have all my avatars and each world in a separate scene each, so I just open up whatever I’m needing and just build that.

You can reuse models (you know; those things that don’t have any other components other than the default stuffs; MeshFilter/MeshRenderer/SkinnedMeshRenderer/Animator attached to them) without any problem.

No need to worry; every given scene will only contain one VRC_AvatarDescriptor or VRC_SceneDescriptor, or none of them. Not one or more of either/both.

However, a viable alternative would be using symbolic links so you can have the specific asset folder containing the models in the other project where you needed. As long as that folder doesn’t contain the scripts needed for avatars it should be fine in the world project…

Unity will override the [file].[ext].meta files with new ones in some cases, especially when switching between the two projects. I have many avatars, so this takes too long, and is also potentially destructive of any MechAnim settings AKA. references will break and settings will reset.

Unless you know of a way to not allow Unity to regenerate asset hashes when it finds a mismatch…?

Why you SHOULD NOT symlink between Unity projects.