/// <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); } } }
public void BakeRender(Water hostWater) { RefAreaRootObjTable.Clear(); ClearBake(hostWater); renderCheck.Clear(); hostWater.allTextureConfig.Clear(); hostWater.WaterRefObjRoot = new GameObject(); hostWater.WaterRefObjRoot.name = "WaterRefObjRoot"; hostWater.WaterRefObjRoot.transform.position = Vector3.zero; hostWater.WaterRefObjRoot.transform.rotation = Quaternion.identity; hostWater.WaterRefObjRoot.transform.localScale = Vector3.one; hostWater.allVisibleRenderList.Clear(); List <MeshRenderer> MeshRendersList = new List <MeshRenderer>(); List <SkinnedMeshRenderer> SkinnedMeshRenderList = new List <SkinnedMeshRenderer>(); MeshRendersList.AddRange(GameObject.FindObjectsOfType <MeshRenderer>()); SkinnedMeshRenderList.AddRange(GameObject.FindObjectsOfType <SkinnedMeshRenderer>()); MeshRenderer waterRender = hostWater.GetComponent <MeshRenderer>(); Collider waterCollider = hostWater.GetComponent <Collider>(); if (waterRender) { if (!waterCollider) { waterCollider = hostWater.gameObject.AddComponent <MeshCollider>(); } if (waterRender.sharedMaterial) { foreach (string spro in WaterTexturesPropertyNames) { if (waterRender.sharedMaterial.HasProperty(spro)) { Texture t = waterRender.sharedMaterial.GetTexture(spro); if (t) { string patch = AssetDatabase.GetAssetPath(t); if (!string.Empty.Equals(patch)) { ResConfigData cof = AssetBundleImporter.MakeTextureAssetBundleFromReference(patch, string.Empty); SceneTextureConfigData cd = new SceneTextureConfigData(); cd.AssetBundleName = cof.AssetBundleName; cd.AssetGUID = cof.AssetGUID; cd.AssetName = cof.AssetName; cd.ShaderKeyWordName = spro; if (null != cof) { hostWater.allTextureConfig.Add(cd); } } } } } } foreach (BoxCollider box in hostWater.WaterRefAeraList) { GameObject go = new GameObject(); go.name = box.gameObject.name; go.transform.SetParent(hostWater.WaterRefObjRoot.transform); go.transform.localPosition = Vector3.zero; go.transform.rotation = Quaternion.identity; go.transform.localScale = Vector3.one; hostWater.WaterRefAeraRootObjList.Add(go); RefAreaRootObjTable.Add(box, go); } BakeRender_MeshRender(MeshRendersList, hostWater, waterRender, waterCollider); BakeRender_SkinnedMeshRender(SkinnedMeshRenderList, hostWater, waterRender, waterCollider); } hostWater.bBaked = true; }