public void ApplyLightmapsTex() { var lightmap_tex = LightmapTexs; int itemLen = 0; if (LightmapTexs != null && LightmapTexs.Length > 0) { LightmapData[] datas = new LightmapData[LightmapTexs.Length]; for (int i = 0; i < LightmapTexs.Length; i++) { LightmapData dataL = new LightmapData(); LightmapsTexture lightmap = LightmapTexs[i]; dataL.lightmapColor = lightmap.color; dataL.lightmapDir = lightmap.dir; dataL.shadowMask = lightmap.shadowmask; datas[i] = dataL; } itemLen = LightmapTexs.Length; LightmapSettings.lightmaps = datas; LightmapSettings.lightmapsMode = lightmapMode; } }
//拷贝烘焙数据并保存 public static void CopyLightmapsData(bool other, Light dirLight) { Scene sc = SceneManager.GetActiveScene(); string sceneName = sc.name; string dir = Path.Combine(LightingDatasPath, sceneName); string lightmap_dir = Path.Combine(dir, "main_lightmap"); if (other) { lightmap_dir = Path.Combine(dir, "other_lightmap"); } if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } if (Directory.Exists(lightmap_dir)) { Directory.Delete(lightmap_dir, true); } Directory.CreateDirectory(lightmap_dir); var lightmaps = LightmapSettings.lightmaps; LightmapsTexture[] lightmapTices = new LightmapsTexture[lightmaps.Length]; for (int index = 0; index < lightmaps.Length; index++) { LightmapData item = lightmaps[index]; LightmapsTexture texName = new LightmapsTexture(); if (item.lightmapColor) { string light_name = Path_HEADER + index + "_light"; texName.color = SaveTexEXR(lightmap_dir, light_name, item.lightmapColor); } if (item.lightmapDir) { string dir_name = Path_HEADER + index + "_dir"; texName.dir = SaveTexPNG(lightmap_dir, dir_name, item.lightmapDir); } if (item.shadowMask) { string sm_name = Path_HEADER + index + "_sm"; texName.shadowmask = SaveTexPNG(lightmap_dir, sm_name, item.shadowMask); } lightmapTices[index] = texName; } LightmapsManager lightmapManager = CreateLightmapsManager(other); lightmapManager.dirLight = dirLight; lightmapManager.lightmapsRenderDatas = lightmapManager.GetLightmapsRenderData(); var lightingData = lightmapManager.lightingData; lightingData.LightmapTexs = lightmapTices; lightingData.lightmapMode = LightmapSettings.lightmapsMode; var prefabName = Path.Combine(dir, other ? "other_lightmap" : "main_lightmap"); prefabName = prefabName + ".prefab"; prefabName = prefabName.Replace('\\', '/'); if (File.Exists(prefabName)) { File.Delete(prefabName); } PrefabUtility.SaveAsPrefabAsset(lightingData.gameObject, prefabName); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }