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