//从流式资源中回退 public static void ComeBackInMemory(this HLODGenerate hlodGenerate, HLODGenerateEditor editor) { //还原HLOD hlodGenerate.ComeBackHLODAsset(editor); //还远原始资源 hlodGenerate.ComeBackOriginalAsset(); //删除流式资源 if (editor.m_DeleteStreamingAsset) { hlodGenerate.DeleteExportStreamingAsset(); } }
//还原HLOD public static void ComeBackHLODAsset(this HLODGenerate hlodGenerate, HLODGenerateEditor editor) { #if UNITY_EDITOR if (hlodGenerate.m_RootLODVolume == null) { return; } #endif Queue <LODVolume> queue = new Queue <LODVolume>(); #if UNITY_EDITOR queue.Enqueue(hlodGenerate.m_RootLODVolume.GetComponent <LODVolume>()); #endif while (queue.Count > 0) { LODVolume lodVolume = queue.Dequeue(); foreach (var child in lodVolume.childVolumes) { queue.Enqueue(child); } if (lodVolume.combined == null) { continue; } GameObject obj = AssetDatabase.LoadAssetAtPath <GameObject>(lodVolume.combined._assetPath); if (obj) { #if UNITY_EDITOR obj = PrefabUtility.InstantiatePrefab(obj, hlodGenerate.m_HLODS.transform) as GameObject; #endif obj.transform.SetPositionAndRotation(lodVolume.combined.Pose.position, lodVolume.combined.Pose.rotation); obj.transform.localScale = lodVolume.combined.Pose.scale; obj.GetComponent <MeshRenderer>().enabled = false; lodVolume.combined._hlodRoot = obj; lodVolume.combined._lodGroup = obj.GetComponent <LODGroup>(); if (editor.m_DeleteStreamingAsset) { PrefabUtility.UnpackPrefabInstance(obj, PrefabUnpackMode.OutermostRoot, InteractionMode.AutomatedAction); } } } }