I was fiddling with something similar to your GameObject per bone idea while looking into physics integration. Was just wondering how you have decided to render the skeleton in this setup. Are you creating separate quad meshes and MeshRenderers/MeshFilters for each of the GameObjects and relying on dynamic batching to reduce the draw calls, or are you skinning all GameObjects under a Skinned Mesh Renderer after assigning bones to updated GameObject positions while having those bones influence the various quads? If so, how have you solved Z sorting between the different submeshes on different GameObjects forming the skinned mesh, or on the seperate quads implementation mentioned first.
Or have you simply created an API for exposing the bones as GameObjects so you can attach things to them (rendering duties still left to the existing rendering code written by Nate). If it is the latter, and it is robust and minimal overhead when disabled for those that don't want (single bool to check to enable and look to update GameObjects per frame), I would vote for integration, as quite a few people seem to have rolled their own solutions desiring this functionality. While trying to do the Physics stuff I tried to think about some edge cases that you may also want to consider. Mainly, I believe you should not destroy GameObjects that have been created by the system to match bones. If a bone no longer exists due to them being renamed or removed from an animation when a new .json version is imported you do not want the user to lose the scripts they have attached to the now defunct GameObject. If a rename occurred for example, then you should simply disable the GameObject and Log a warning stating that the bone no longer exists in the animation, maybe asking if you should recycle the GameObject for a different (new) bone (just update GameObject to have new name). Worst case, you create the new GameObject for the renamed bone and allow the user to manually copy across their scripts/components with all variables intact before they delete it manually forever. Then it is on the user not to lose their scripts. You can see that the main issue with such a system is that you have to take care not to destroy scripts or attachments that people have set and all the public variables or configuration they may have populated through the inspector. Also, for attaching colliders take a look at the Physics integration I started just in case it may be of some help to you. It takes care of creating/updating Bounding box colliders and disabling/enabling on required frames. It also at least allows you to override if a collider should be displayed or if you want to put you own custom one on there too (box collider).
If you have all of the above checked off then this will be pretty useful to a lot of people.
Link.
Regards,
Rob