Ayfel / PrefabLightmapping

Script for saving lightmapping data to prefabs. Used through the Assets tab in Unity. Place your prefbas in the scene with this script at the root. Set up your lighting and in the editor go to Assets->Bake Prefab Lightmaps. After is processed you can now spawn your prefabs in different scenes and they will use the lightmapping from the original scene.
655 stars 91 forks source link

Not working correctly on Prefab Variants #25

Open Plaximo opened 4 years ago

Plaximo commented 4 years ago

First of all very cool script. I have a problem using this with prefab variants, if I bake the light on a prefab variant he is copying all meshes to the parent prefab.

I made a quickfix but I'm not sure about it. I commented out everything and only left the stuff in the else branch, it seems to work.

if (targetPrefab != null) {
                GameObject root = PrefabUtility.GetOutermostPrefabInstanceRoot(instance.gameObject); // 根结点
                //如果当前预制体是是某个嵌套预制体的一部分(IsPartOfPrefabInstance)
                if (root != null) {
                    GameObject rootPrefab = PrefabUtility.GetCorrespondingObjectFromSource(instance.gameObject);
                    string rootPath = AssetDatabase.GetAssetPath(rootPrefab);
                    //打开根部预制体
                    PrefabUtility.UnpackPrefabInstanceAndReturnNewOutermostRoots(root, PrefabUnpackMode.OutermostRoot);
                    try {
                        //Apply各个子预制体的改变
                        PrefabUtility.ApplyPrefabInstance(instance.gameObject, InteractionMode.AutomatedAction);
                    } catch { } finally {
                        //重新更新根预制体
                        PrefabUtility.SaveAsPrefabAssetAndConnect(root, rootPath, InteractionMode.AutomatedAction);
                    }
                } else {
                    PrefabUtility.ApplyPrefabInstance(instance.gameObject, InteractionMode.AutomatedAction);
                }
            }
Ayfel commented 4 years ago

Oh interesting, I haven't tested with prefab variants, thank you for the snippet. I will check it to make sure when I have some time

Entretoize commented 2 years ago

Can you tell more about you fix ? I'm not able to make the script work...