esperecyan / UniVRMExtensions

https://pokemori.booth.pm/items/1788660
MIT License
45 stars 3 forks source link

SwayingObjectsConverter doesn't work if DynamicBone is located on a custom assembly #2

Closed andreiagmu closed 2 years ago

andreiagmu commented 2 years ago

In my project, I use custom .asmdef files, for better code organization and compilation speed. The DynamicBone scripts are located inside a custom assembly called ThirdParty (ThirdParty.asmdef).

So, in DynamicBones.cs, the Type.GetType() calls fail, because DynamicBone isn't located on Assembly-CSharp (I don't use the Unity-generated assemblies on my project). internal static readonly Type DynamicBoneType = Type.GetType("DynamicBone, Assembly-CSharp");

Result: DynamicBone is imported on my project, but the Converter thinks DynamicBone isn't imported.

One option would be to search for those types in all assemblies of the project. (instead of searching on Assembly-CSharp only) Or in the worst-case scenario, have the user supply (using a text field?) the assembly where DynamicBone is located, and save that info somewhere.

esperecyan commented 2 years ago

I think that it is difficult for this repository to support that case. Cloud not you download the code from the repository and rewrite the code to use it?

andreiagmu commented 2 years ago

Sure, I can do it. I tested rewriting "Assembly-CSharp" -> "ThirdParty" in the code, and then it worked. But I still think it would be best to make a proper fix for this issue (possibly using one of my suggestions). And even if it's not the majority, I don't think it's that uncommon for a user to use .asmdefs on their external assets.

Even if most users don't use custom assemblies, there may be users that put their external assets (DynamicBone included) to their Plugins folder. In this case, Dynamic Bone's assembly would be "Assembly-CSharp-firstpass" instead, if I'm not mistaken.

esperecyan commented 2 years ago

Would you not separate Unity projects according to the work? I think that almost no users will create asmdef in the DynamicBone folder or replace them in the plugin folder in Unity projects that use UniVRM as an editor extension.

andreiagmu commented 2 years ago

Ok, fair enough. I guess my case is too niche, as I'm making a game (using vroid models) and I have included UniVRM and UniVRMExtensions to my main project (to keep track of only one project/repository and simplify my workflow).

Anyway, thanks for answering!