public void ResetMemory() { bOptimitzedMenory = true; currFadeMatTable = null; if (OtherLoadedResTable.Count <= 0 || AlwaysUnOptimitzedMemory) { return; } foreach (SceneMaterialConfig r in ConfigDataList) { if (!r.SharedMaterial) { continue; } if (UnOptimitzedMaterials.ContainsKey(r.SharedMaterial)) { int refCount = --UnOptimitzedMaterials[r.SharedMaterial]; if (refCount <= 0) { foreach (SceneTextureConfigData rt in r.TextureConfigList) { if (!rt.ShaderKeyWordName.Equals(MainTexKeyWorld)) { Material orginalInstanceMat = null; Orginal_AlphaInstanceTable.TryGetValue(r.SharedMaterial, out orginalInstanceMat); if (rt.ShaderKeyWordVariantName.Count != 0) { foreach (string var in rt.ShaderKeyWordVariantName) { if (orginalInstanceMat) { orginalInstanceMat.DisableKeyword(var); } r.SharedMaterial.DisableKeyword(var); } } if (orginalInstanceMat) { orginalInstanceMat.SetTexture(rt.ShaderKeyWordName, null); } r.SharedMaterial.SetTexture(rt.ShaderKeyWordName, null); } } ResetEmissonTexture(r.SharedMaterial); ResetSurfaceDefineTexture(r.SharedMaterial); UnOptimitzedMaterials.Remove(r.SharedMaterial); } } } foreach (ResNode res in OtherLoadedResTable.Values) { ResNode temp = res; AssetBundleManager.DeleteAssetsAsync(ref temp, this, false); } OtherLoadedResTable.Clear(); }
/// <summary> /// 资源加载回调 /// </summary> /// <param name="cof"></param> /// <param name="res"></param> /// <param name="UserDataObj"></param> public void ResLoadCallBack(ResConfigData cof, ResNode res, System.Object UserDataObj) { SceneTextureConfigData rt = cof as SceneTextureConfigData; SceneMaterialConfig r = UserDataObj as SceneMaterialConfig; if (null == rt) { return; } if (!bPreaLoaded) { currPreLoadedTexCount++; } //加载资源失败了,回调为null,计数器也要+1 if (ResNode.isNullOrEmpty(res)) { return; } if (!r.SharedMaterial) { return; } Texture tex = res.ConvertRes <Texture>(); Material instanceFadeMat = null; Material orginalInstanceMat = null; if (currFadeMatTable != null && currFadeMatTable.ContainsKey(r.SharedMaterial)) { instanceFadeMat = currFadeMatTable[r.SharedMaterial]; } Orginal_AlphaInstanceTable.TryGetValue(r.SharedMaterial, out orginalInstanceMat); if (instanceFadeMat) { instanceFadeMat.SetTexture(rt.ShaderKeyWordName, tex); } if (orginalInstanceMat) { orginalInstanceMat.SetTexture(rt.ShaderKeyWordName, tex); } r.SharedMaterial.SetTexture(rt.ShaderKeyWordName, tex); if (rt.ShaderKeyWordVariantName.Count != 0) { foreach (string variant in rt.ShaderKeyWordVariantName) { if (instanceFadeMat) { instanceFadeMat.EnableKeyword(variant); } if (orginalInstanceMat) { orginalInstanceMat.EnableKeyword(variant); } r.SharedMaterial.EnableKeyword(variant); } } }