コード例 #1
0
ファイル: LoadUtil.cs プロジェクト: atom-chen/tianyu
    /// <summary>
    /// 获取需要新加载的资源配置表 by吴江
    /// </summary>
    /// <param name="_newData">新场景所需要的整体资源</param>
    /// <param name="_oldData">原场景已经有的整体资源</param>
    /// <returns>新场景还需要加载的资源表</returns>
    private SceneConfigData GetNeedLoad(SceneConfigData _newData)
    {
        SceneConfigData needLoadData = SceneConfigData.CreateInstance<SceneConfigData>();


        needLoadData.name = _newData.name;
        needLoadData.instanceID = _newData.instanceID;

        //获取旧场景中不存在的新资源
        foreach (var newData in _newData.textureDataList)
        {
            if (!LoadCache.HasLoaded(newData, AssetType.texture) && !needLoadData.textureDataList.Contains(newData))
            {
                needLoadData.textureDataList.Add(newData);
            }
        }
        foreach (var newData in _newData.shaderDataList)
        {
            if (!LoadCache.HasLoaded(newData, AssetType.shader) && !needLoadData.shaderDataList.Contains(newData))
            {
                needLoadData.shaderDataList.Add(newData);
            }
        }
        foreach (var newData in _newData.materialDataList)
        {
            if (!LoadCache.HasLoaded(newData, AssetType.material) && !needLoadData.materialDataList.Contains(newData))
            {
                needLoadData.materialDataList.Add(newData);
            }
        }
        return needLoadData;
    }
コード例 #2
0
ファイル: LoadUtil.cs プロジェクト: atom-chen/tianyu
    protected void BindMaterialDepend(List<MaterialAsset> _materialAssetList)
    {
        foreach (var materialAsset in _materialAssetList)
        {
            string matName = materialAsset.matName.ToLower();
            if (!LoadCache.HasLoaded(matName, AssetType.material))
            {
                Debug.Log(matName + "找不到");
                continue;
            }
            MaterialRelationship rl = materialAsset.materialRelationship;

            Material mat = LoadCache.GetMaterial(matName);//materialAssetBundleRefDic[materialAsset.matName].mainAsset as Material;
            if (rl != null && mat.name.ToLower().Equals(rl.matName.ToLower()))
            {
                mat.shader = Shader.Find(rl.sdName);//GetShader(rl.sdName);//shaderAssetBundleRefDic[rl.sdName].mainAsset as Shader;
                foreach (var item in rl.propertyPairList)
                {
                    ShaderPropertyType type = (ShaderPropertyType)item.type;
                    switch (type)
                    {
                        case ShaderPropertyType.Color:
                            mat.SetColor(item.propertyName, item.color);
                            break;
                        case ShaderPropertyType.Vector:
                            mat.SetVector(item.propertyName, item.v4);
                            break;
                        case ShaderPropertyType.Float:
                        case ShaderPropertyType.Range:
                            mat.SetFloat(item.propertyName, item.value);
                            break;
                        case ShaderPropertyType.TexEnv:
                            if (LoadCache.HasLoaded(item.texName, AssetType.texture))
                            {
                                mat.SetTexture(item.propertyName, LoadCache.GetTexture(item.texName));//textureAssetBundleRefDic[item.texName].mainAsset as Texture);
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
        }
    }
コード例 #3
0
ファイル: LoadUtil.cs プロジェクト: atom-chen/tianyu
 /// <summary>
 /// 根据关联性配置组装物体
 /// </summary>
 /// <param name="_prefab"></param>
 /// <param name="_relationship"></param>
 public void ProcessGameObjectRelation(GameObject _prefab, GameObjectRelationship _relationship)
 {
     if (_prefab == null || _relationship == null) return;//如果物体为空或关联性配置为空,返回
     if (_relationship.matNames.Count > 0 && _prefab.GetComponent<Renderer>() != null)//如果关联性配置中数据为0或者该物体没有渲染组件,返回
     {
         int count = _relationship.matNames.Count;
         Material[] matArray = _prefab.GetComponent<Renderer>().sharedMaterials;
         for (int i = 0; i < count; i++)//遍历关联性配置数据
         {
             if (i >= matArray.Length)
             {
                 Debug.LogError(_prefab.name + "的配置文件记录的材质数量与实际材质数量不符合,请美术检查资源!");
                 break;
             }
             if (LoadCache.HasLoaded(_relationship.matNames[i], AssetType.material))//如果材质资源缓存中有关联性配置中需求的材质
             {
                 matArray[i] = LoadCache.GetMaterial(_relationship.matNames[i]);//materialAssetBundleRefDic[_relationship.matNames[i]].mainAsset as Material;
                 if (matArray[i] != null && matArray[i].shader != null)
                 {
                     Shader temp = Shader.Find(matArray[i].shader.name);
                     if (temp != null)
                         matArray[i].shader = temp;
                 }
             }
             else
             {
                 Debug.LogError(_prefab.name + " , can't find material that names " + _relationship.matNames[i] + " , please check it ! " + LoadCache.materialRefDic.Count);
             }
         }
         _prefab.GetComponent<Renderer>().sharedMaterials = matArray;
         //_prefab.SetActive(true);
     }
     //对子物体进行递归
     if (_prefab.transform.childCount > 0 && _relationship.childRelationList.Count > 0)
     {
         int fixedCount = Mathf.Min(_prefab.transform.childCount, _relationship.childRelationList.Count);
         for (int i = 0; i < fixedCount; i++)
         {
             ProcessGameObjectRelation(_prefab.transform.GetChild(i).gameObject, _relationship.childRelationList[i]);
         }
     }
 }
コード例 #4
0
ファイル: LoadUtil.cs プロジェクト: atom-chen/tianyu
 /// <summary>
 /// 驱动贴图加载进程的递归函数
 /// </summary>
 /// <param name="_mainPath">资源主路径</param>
 /// <param name="_list">资源列表</param>
 /// <param name="_index">当前进度</param>
 protected void DownloadTexture(string _mainPath, List<string> _list, int _index)
 {
     if (_list.Count > _index)
     {
         string name = _list[_index];
         //如果缓存列表中已经有,则不再重复下载
         if (LoadCache.HasLoaded(name, AssetType.texture) || LoadCache.waitTexture.Contains(name))
         {
             return;
         }
         else
         {
             texturePendings++;
             LoadCache.waitTexture.Add(name);
             string Path = _mainPath + name + ".texture";
             AssetMng.instance.LoadAsset<Texture>(Path, (x, y) =>
             {
                 texturePendings--;
                 LoadCache.waitTexture.Remove(name);
                 LoadCache.textureRefDic[name] = x;
             });
         }
     }
 }
コード例 #5
0
ファイル: LoadUtil.cs プロジェクト: atom-chen/tianyu
 /// <summary>
 /// 驱动材质加载进程的递归函数
 /// </summary>
 /// <param name="_mainPath">资源主路径</param>
 /// <param name="_list">资源列表</param>
 /// <param name="_index">当前进度</param>
 protected void DownloadMaterial(string _mainPath, List<string> _list, int _index)
 {
     if (_list.Count > _index)
     {
         string name = _list[_index];
         //如果缓存列表中已经有,则不再重复下载
         if (LoadCache.HasLoaded(name, AssetType.material) || LoadCache.waitMaterial.Contains(name))
         {
             return;
         }
         else
         {
             materialPendings++;
             LoadCache.waitMaterial.Add(name);
             string Path = _mainPath + name + ".material";
             AssetMng.instance.LoadAsset<Material>(Path, (x, y) =>
             {
                 materialPendings--;
                 LoadCache.waitMaterial.Remove(name);
                 LoadCache.materialRefDic[name] = x;
             });
         }
     }
 }