Example #1
0
    /// <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);
            }
        }
    }
Example #2
0
        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;
        }