Exemple #1
0
    //[MenuItem("FService/同步协议文件")]
    public static void UpdateCFSeriverPro()
    {
        string             keyPath = "[server]";
        SelectPrefabEditor spe     = new SelectPrefabEditor(".cs", keyPath, "", true);
        List <string>      paths   = new List <string>();

        for (int i = 0; i < spe.tempAllStrs.Length; i++)
        {
            string allPath = spe.tempAllStrs[i];
            int    pos     = allPath.IndexOf(keyPath);
            if (pos != -1)
            {
                string val = allPath.Substring(0, pos) + keyPath;
                if (!paths.Contains(val))
                {
                    paths.Add(val);
                }
            }
        }

        for (int i = 0; i < paths.Count; i++)
        {
            string tempPath = paths[i];
            int    pos      = tempPath.LastIndexOf("/");
            string exPath   = "";
            if (pos != -1)
            {
                exPath = tempPath.Substring(pos);
            }
            MyEdior.CopyDirectory(Application.dataPath.Replace("/Assets", "/" + paths[i]), Application.dataPath.Replace("Client/FNEngine/Project/Assets", "CFServer/Server/F2DEngineServer/FEngine" + exPath), (f) =>
            {
                return(f.IndexOf(".meta") == -1);
            });
        }
    }
Exemple #2
0
 // 添加UniversalPanel组件的GameObject被选中时触发该函数
 void OnEnable()
 {
     np           = target as FUniversalPanel;
     KeyStr       = np.mKey;
     isUpdateShow = !CheckData(np, KeyStr);
     if (isUpdateShow)
     {
         if (!Application.isPlaying)
         {
             applyData();
         }
     }
     //applyData();
     mSelectPrefab = new SelectPrefabEditor("");
 }
Exemple #3
0
    public static void CheckTight()
    {
        SelectPrefabEditor spe = new SelectPrefabEditor(".png", "/Assetbundle/Effect/Frame/Raw", "", true);

        for (int i = 0; i < spe.tempAllStrs.Length; i++)
        {
            TextureImporter import = AssetImporter.GetAtPath(spe.tempAllStrs[i]) as TextureImporter;
            if (import != null)
            {
                if (import.textureType == TextureImporterType.Sprite)
                {
                    TextureImporterSettings set = new TextureImporterSettings();
                    import.ReadTextureSettings(set);
                    set.spriteMeshType = SpriteMeshType.Tight;
                    import.SetTextureSettings(set);
                    import.SaveAndReimport();
                }
            }
        }
    }
Exemple #4
0
    public static bool CreateAllAssetData()
    {
        if (Application.isPlaying || EditorApplication.isCompiling)
        {
            Debug.LogError("导表失败:运行中无法导表");
            return(false);
        }
        try
        {
            TimerController.EditorClear();
            EditorUtility.DisplayCancelableProgressBar("导表中...", "正在计算配置", 0);
            ScriptsTime.Begin();
            SelectPrefabEditor spe      = new SelectPrefabEditor(".xlsx", "/" + ResConfig.EXCELFILEPATH + "/", "", false);
            List <ExcelAsset>  allExcel = new List <ExcelAsset>();
            var ass = Assembly.Load("Assembly-CSharp");
            for (int i = 0; i < spe.tempAllStrs.Length; i++)
            {
                string excelName = spe.tempAllStrs[i].Replace(".xlsx", "");
                string ClassName = excelName.Replace("Asset", "") + "Asset";
                var    type      = ass.GetType(ClassName);
                if (type != null)
                {
                    ExcelAsset ex = new ExcelAsset(excelName);
                    allExcel.Add(ex);
                }
            }

            int    allCount = allExcel.Count;
            int    maxNum   = allExcel.Count;
            string error    = null;
            for (int i = 0; i < 2; i++)
            {
                Timer_Thread.SetTimer((t, r) =>
                {
                    ExcelAsset asset = null;
                    lock (allExcel)
                    {
                        if (allExcel.Count > 0)
                        {
                            asset = allExcel[0];
                            allExcel.RemoveAt(0);
                        }
                    }
                    try
                    {
                        if (asset != null)
                        {
                            asset.Deserialize();
                            r.callBack = (arg1, arg2) =>
                            {
                                try
                                {
                                    EditorUtility.DisplayCancelableProgressBar("导表中...", "正在导表:" + asset.mPath.ClassName + "(" + (allCount - maxNum).ToString() + "/" + allCount.ToString() + ")", (allCount - maxNum) / (float)allCount);
                                    asset.BuildAsset();
                                    maxNum--;
                                    if (!string.IsNullOrEmpty(asset.GetError()))
                                    {
                                        if (error == null)
                                        {
                                            error = asset.GetError();
                                        }
                                        maxNum = 0;
                                    }
                                }
                                catch (System.Exception e)
                                {
                                    maxNum = 0;
                                    error  = asset.mPath.ClassName + ":未知错误:" + e.ToString();
                                }
                            };
                            return(0);
                        }
                    }
                    catch (System.Exception e)
                    {
                        maxNum = 0;
                        error  = asset.mPath.ClassName + ":未知错误:" + e.ToString();
                    }
                    return(-1);
                }, 0, null);
            }

            while (maxNum > 0 && error == null)
            {
                System.Threading.Thread.Sleep(100);
                TimerController.EditorUpdate();
            }
            EditorUtility.ClearProgressBar();
            if (error == null)
            {
                ScriptsTime.ShowTime("导表共用时间");
                Debug.Log("导表成功");
            }
            else
            {
                Debug.LogError("导表失败:" + error);
                return(false);
            }
            AssetDatabase.Refresh();
            return(true);
        }
        catch (System.Exception e)
        {
            EditorUtility.ClearProgressBar();
            Debug.LogError("导表失败:" + e.ToString());
            EditorUtility.DisplayDialog("导表错误", e.ToString(), "确定");
            return(false);
        }
    }
Exemple #5
0
 // 添加UniversalPanel组件的GameObject被选中时触发该函数
 void OnEnable()
 {
     np             = target as FCUniversalItem;
     mSelectPrefab  = new SelectPrefabEditor(np.nTypeKey);
     mCurSelectName = np.nTypeKey;
 }
    //OperationType 0 解压,1压缩,2不处理
    public static void CreateConfig(string stream, BundleManager.StreamConfig copyStream, int OperationType)
    {
        long   fileSize       = 0;
        string streamTempPath = stream + "/";
        string streamingPath  = streamTempPath + ResConfig.STREAMINGASSETSCONFIG;

        EditorUtility.DisplayCancelableProgressBar("打包资源", "正在处理 " + stream, 0.3f);
        string unKey = ".meta";

        if (OperationType == 2)
        {
            if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.iOS)
            {
                OperationType = 1;
                unKey         = ".meta.delete.unity3d.manifest";
            }
        }
        if (OperationType != 2)
        {
            //插入压缩,解压流程
            for (int i = 0; i < mZipFilesName.Count; i++)
            {
                string pathFile = streamTempPath + mZipFilesName[i];
                string zipDir   = FEPath.GetDirectoryName(pathFile) + "/";
                if (OperationType == 1)
                {
                    if (FEPath.Exists(pathFile))
                    {
                        //string unKey = ".meta";//: ".meta.delete.unity3d.manifest";
                        string outPath = FZipTool.ZipDirectory(pathFile, zipDir, unKey);
                        //删除压缩前的文件夹
                        if (unKey == ".meta")
                        {
                            MyEdior.DeletFile(pathFile);
                        }
                        fileSize += new System.IO.FileInfo(outPath).Length / 1024;
                    }
                }
                else
                {
                    pathFile += ResConfig.FZIPNAMEEX;
                    if (File.Exists(pathFile))
                    {
                        FZipTool.UnZip(pathFile, zipDir, ResConfig.FZIPPASS);
                        //删除解压前的文件夹
                        File.Delete(pathFile);
                    }
                }
            }
        }

        AssetDatabase.Refresh();

        BundleManager.StreamConfig streamConfig = new BundleManager.StreamConfig();
        List <string>      fileList             = new List <string>();
        string             keyStream            = "/" + FEPath.GetFileNameWithoutExtension(FEPath.GetDirectoryName(streamTempPath)) + "/";
        SelectPrefabEditor spe = new SelectPrefabEditor("", keyStream, "", true);

        for (int i = 0; i < spe.tempAllStrs.Length; i++)
        {
            string path = spe.tempAllStrs[i];
            if (File.Exists(path) && path.IndexOf(F_NOCOPYSTREAM) == -1 && (path.IndexOf("Assembly-CSharp") == -1))
            {
                int pos = path.IndexOf(keyStream);
                fileList.Add(path.Substring(pos + keyStream.Length));
            }
        }

        if (fileList.Count != 0)
        {
            for (int index = 0; index < fileList.Count; index++)
            {
                string fileName  = fileList[index];
                var    normaFile = new BundleManager.StreamConfig.NormalFile();
                int    pathPos   = fileName.LastIndexOf("/");
                string pathFile  = "";
                if (pathPos != -1)
                {
                    pathFile = fileName.Substring(0, pathPos);
                }
                normaFile.path     = pathFile;
                normaFile.fileName = fileName;
                normaFile.md5      = FEngineManager.GetMD5HashFromFile(streamTempPath + fileName);
                normaFile.resType  = FEPath.GetExtension(fileName);
                normaFile.FileType = GetResType(normaFile);// (normaFile.resType == ResConfig.FZIPNAMEEX);
                streamConfig.fileDatas.Add(normaFile);
            }
        }

        ScriptsTime.Debug("创建StreamingConfig完成");

        streamConfig.IsBackDownMicro = copyStream.IsBackDownMicro;
        streamConfig.versionId       = copyStream.versionId;
        streamConfig.CustomConfig    = copyStream.CustomConfig;
        streamConfig.zipSize         = fileSize;

        FSaveHandle sd = FSaveHandle.Create(streamingPath, FFilePath.FP_Abs, FOpenType.OT_Write);

        sd.PushObject(streamConfig);
        sd.Save();
        EditorUtility.ClearProgressBar();
    }
    public static void CreatePackage(bool isCreateBundle = true)
    {
        List <string> NoBundlesFiles = new List <string>();
        string        path           = SceneManager.STREAMINGPATH.Replace("file://", "") + ResConfig.FDESASSETBUNDLE;                                                                          //正式路径
        string        tempPath       = FEPath.GetDirectoryName(SceneManager.STREAMINGPATH.Replace("file://", "")).Replace("Assets/StreamingAssets", "FPartPack/") + ResConfig.FDESASSETBUNDLE; //打包缓存路径

        //删除上次数据
        if (FEPath.Exists(path))
        {
            MyEdior.DeletFile(path);
        }

        if (File.Exists(path + ResConfig.FZIPNAMEEX))
        {
            File.Delete(path + ResConfig.FZIPNAMEEX);
        }

        AssetDatabase.Refresh();

        string onlyKey = "[" + PackType.only + "]";

        SelectPrefabEditor spe = new SelectPrefabEditor(".", "/" + ResConfig.ASSETBUNDLE + "/", "", true);

        EditorDay day = new EditorDay();

        day.SaveFile();
        bool IsSpeedPack = day.IsSpeedPack; //连续打包,不用清空,快速打包模式

        day.IsSpeedPack = true;
        day.SaveFile();

        if (!IsSpeedPack)
        {
            if (isCreateBundle)
            {
                IsSpeedPack = !EditorUtility.DisplayDialog("打包提示", "是否强制清空缓存打包?\n(提示:差异包不建议清空,可能产生Md5码的变化)", "清空", "不清空");
            }
        }

        if (isCreateBundle && !IsSpeedPack)
        {
            if (!ClearAssetBundleName())
            {
                Debug.LogError("强制终止打包");
                EditorUtility.ClearProgressBar();
                return;
            }
        }

        if (!IsSpeedPack)
        {
            if (FEPath.Exists(tempPath))
            {
                MyEdior.DeletFile(tempPath);
            }
        }


        EditorUtility.ClearProgressBar();
        FEPath.CreateDirectory(path);
        FEPath.CreateDirectory(tempPath);

        BundleManager.BundleConfig bundleConfig = new BundleManager.BundleConfig();
        Dictionary <string, Dictionary <string, BundleManager.BundleConfig.BundleFileData> > mBundleFileDatas = new Dictionary <string, Dictionary <string, BundleManager.BundleConfig.BundleFileData> >();
        Dictionary <string, int> mBundleEncrypts           = new Dictionary <string, int>();
        List <EditorScripts.NoPackAsset.PackData> packData = new List <EditorScripts.NoPackAsset.PackData>();
        List <AssetImporter> Importers = new List <AssetImporter>();


        var pmode = Enum.GetValues(typeof(FPackageEditor.PackType));
        Dictionary <string, int> PackTypeDic = new Dictionary <string, int>();

        foreach (var fp in pmode)
        {
            FPackageEditor.PackType tempType = (FPackageEditor.PackType)fp;
            PackTypeDic[tempType.ToString()] = (int)tempType;
        }

        ScriptsTime.Begin();
        //先处理文件夹一下得到打包需要的数据
        Dictionary <string, int>           HeadPath         = new Dictionary <string, int>();
        Dictionary <string, ProPathHandle> datas            = new Dictionary <string, ProPathHandle>();
        Dictionary <string, int>           allMushResouress = new Dictionary <string, int>();//所有引用的资源
        List <PackFileData>         packFiles   = new List <PackFileData>();
        Dictionary <string, string> WarningFile = new Dictionary <string, string>();

        for (int i = 0; i < spe.tempAllStrs.Length; i++)
        {
            PackFileData pfd = new PackFileData();
            packFiles.Add(pfd);
            string realName = spe.tempAllStrs[i];
            pfd.realFileName = realName;
            string        pathFile  = FEPath.GetDirectoryName(realName);
            ProPathHandle ProHandle = null;
            if (!datas.TryGetValue(pathFile, out ProHandle))
            {
                ProHandle       = new ProPathHandle();
                datas[pathFile] = ProHandle;
                ProHandle.path  = pathFile;
                int    headPos       = pathFile.IndexOf("/" + ResConfig.ASSETBUNDLE + "/");
                string otherFilePath = "";
                if (headPos == -1)
                {
                    //纯路经
                    otherFilePath = pathFile + "/";
                }
                else
                {
                    otherFilePath = pathFile.Substring(0, headPos + 1);
                }

                string[] tempHeadPaths = otherFilePath.Split('/');
                string   tString       = "";
                for (int t = 0; t < tempHeadPaths.Length - 1; t++)
                {
                    HeadPath[tString + tempHeadPaths[t]] = 1;
                    tString += (tempHeadPaths[t] + "/");
                }
                HeadPath[tString + ResConfig.ASSETBUNDLE] = 0;

                //文件夹打包类型获取
                int packType = 0;
                if (headPos != -1)
                {
                    string validPath  = pathFile.Substring(headPos + ResConfig.ASSETBUNDLE.Length + 2);
                    var    keyEncrypt = FUniversalFunction.GetChunk(validPath, "[", "]");
                    ProHandle.realPath = keyEncrypt[0].ToLower();
                    if (ProHandle.realPath != "")
                    {
                        if (WarningFile.ContainsKey(ProHandle.realPath))
                        {
                            Debug.Log("<color=#660000>存在相同的相对路径打包文件</color>:" + WarningFile[ProHandle.realPath] + "<color=#660000>****</color>" + pathFile);
                        }
                        WarningFile[ProHandle.realPath] = pathFile;
                    }

                    string[] proPaths  = validPath.Split('/');
                    string   startFile = pathFile.Substring(0, headPos + ResConfig.ASSETBUNDLE.Length + 1);
                    for (int p = 0; p < proPaths.Length; p++)
                    {
                        startFile = startFile + "/" + proPaths[p];
                        var parms = PackFileEditor.PackFileConfig.GetPackType(startFile);
                        if (parms != null)
                        {
                            packType |= parms.type;
                        }
                    }

                    for (int p = 1; p < keyEncrypt.Count; p++)
                    {
                        packType |= PackTypeDic[keyEncrypt[p]];
                    }
                }
                ProHandle.packType = packType;
            }

            int    lastIndex = realName.LastIndexOf("/");
            string fileName  = realName.Substring(lastIndex + 1).ToLower();
            pfd.budleName = string.IsNullOrEmpty(ProHandle.realPath) ? fileName : (ProHandle.realPath + "/" + fileName);
            pfd.ProHandle = ProHandle;
            if (!PackFileEditor.IsHaveSameWinType(ProHandle.packType, (int)PackType.only))
            {
                string[] paths = AssetDatabase.GetDependencies(realName);
                for (int p = 0; p < paths.Length; p++)
                {
                    allMushResouress[paths[p]] = 1;
                }
            }
        }


        int AssetsNum = "Assets".Length + 1;

        for (int i = 0; i < packFiles.Count; i++)
        {
            PackFileData  pf       = packFiles[i];
            ProPathHandle pHandle  = pf.ProHandle;
            string        spePath  = pf.realFileName;
            string        pathName = pHandle.path;

            if (EditorUtility.DisplayCancelableProgressBar("打包数据资源", "转换进度: " + spePath, (float)i / spe.tempAllStrs.Length))
            {
                EditorUtility.ClearProgressBar();
                return;
            }

            EditorScripts.NoPackAsset.PackData enp = new EditorScripts.NoPackAsset.PackData();
            enp.allName = spePath;

            AssetImporter ai       = AssetImporter.GetAtPath(spePath);
            int           packType = pf.ProHandle.packType;//PackFileEditor.IsHaveSameWinType(ProHandle.packType, (int)PackType.only)

            if (ai != null)
            {
                Importers.Add(ai);
                string houPro = "";

                string budleName   = pf.budleName;
                string encryptFile = budleName;

                //需要智能排除
                if (PackFileEditor.IsHaveSameWinType(packType, (int)PackType.only))
                {
                    if (!allMushResouress.ContainsKey(spePath))
                    {
                        ai.assetBundleName = "";
                        continue;
                    }
                }
                else
                {
                    packData.Add(enp);
                }

                bool isNoBundle = PackFileEditor.IsHaveSameWinType(packType, (int)PackType.nb);

                int    headPos  = budleName.LastIndexOf(".");
                string typeName = BundleManager.PrefabType;
                if (headPos != -1)
                {
                    string hou = budleName.Substring(headPos);
                    if (hou != "" && BundleManager.AssetType.IndexOf(hou) != -1)
                    {
                        houPro = hou;
                    }
                    budleName = budleName.Substring(0, headPos);
                    typeName  = hou.ToLower();
                }

                string pathFile = "";
                headPos = budleName.LastIndexOf("/");
                if (headPos != -1)
                {
                    pathFile += (budleName.Substring(0, headPos));
                }

                Dictionary <string, BundleManager.BundleConfig.BundleFileData> bmbfds = new Dictionary <string, BundleManager.BundleConfig.BundleFileData>();
                mBundleEncrypts[pathFile] = packType;
                if (mBundleFileDatas.ContainsKey(pathFile))
                {
                    bmbfds = mBundleFileDatas[pathFile];
                }
                else
                {
                    if (!isNoBundle)
                    {
                        mBundleFileDatas[pathFile] = bmbfds;
                    }
                }
                enp.key = (budleName + houPro).ToLower();
                string assetbundleName = budleName + ResConfig.ASSETBUNDLESUFFIXES;
                //路径打包规则
                if (pathFile != "")
                {
                    string txtName = pathFile.ToLower();
                    int    filePos = pathFile.LastIndexOf("/");
                    if (filePos != -1)
                    {
                        txtName = txtName.Substring(filePos + 1);
                    }
                    if (!PackFileEditor.IsHaveSameWinType(packType, (int)PackType.part))
                    {
                        assetbundleName = pathFile + "/" + txtName + ResConfig.ASSETBUNDLESUFFIXES;
                    }
                }

                enp.type = packType;
                if (isNoBundle)
                {
                    string CopyBunld = encryptFile;
                    string copyPath  = tempPath + "/" + encryptFile;//修改
                    string dir       = FEPath.GetDirectoryName(copyPath);
                    if (isCreateBundle)
                    {
                        if (!FEPath.Exists(dir))
                        {
                            FEPath.CreateDirectory(dir);
                        }

                        if (File.Exists(copyPath))
                        {
                            File.Copy(spePath, copyPath, true);
                        }
                        else
                        {
                            File.Copy(spePath, copyPath);
                        }
                        NoBundlesFiles.Add(copyPath);
                    }
                    enp.key       = CopyBunld.ToLower();
                    enp.bunldName = enp.key;
                }
                else
                {
                    ai.assetBundleName = assetbundleName.ToLower();
                    enp.bunldName      = ai.assetBundleName;
                    //特殊处理
                    if (ai is TextureImporter)
                    {
                        TextureImporter ti = ai as TextureImporter;
                        if (ti.textureType == TextureImporterType.Sprite)
                        {
                            typeName = BundleManager.SpriteType;
                        }
                        else
                        {
                            typeName = BundleManager.TextureType;
                        }

                        string tagName = ai.assetBundleName.Replace(ResConfig.ASSETBUNDLESUFFIXES, ".PackTag");

                        if (PackFileEditor.IsHaveSameWinType(packType, (int)PackType.part))
                        {
                            tagName = "";
                        }

                        if (tagName != ti.spritePackingTag)
                        {
                            ti.spritePackingTag = tagName;
                            ti.SaveAndReimport();
                        }
                    }

                    BundleManager.BundleConfig.BundleFileData fd = new BundleManager.BundleConfig.BundleFileData();
                    fd.bundleFile          = assetbundleName.ToLower();
                    fd.resFileName         = (budleName.Replace(pathFile + "/", "") + houPro).ToLower();
                    fd.resType             = typeName;
                    fd.mIsCache            = PackFileEditor.IsHaveSameWinType(packType, (int)PackType.cache);
                    bmbfds[fd.resFileName] = fd;
                }
            }
        }

        ScriptsTime.Debug("打包资源完成");

        //创建免打包配置
        EditorScripts.CreateNoPackAsset(packData);
        //创建文件夹外观表现
        PackFileEditor.PackFileConfig.SetHeadFile(HeadPath);

        ScriptsTime.ShowTime("计算打包配置文件");
        if (isCreateBundle)
        {
            foreach (var ke in mBundleFileDatas)
            {
                var encrypts = mBundleEncrypts[ke.Key];
                BundleManager.BundleConfig.PathBundles bbf = new BundleManager.BundleConfig.PathBundles();
                bbf.path        = ke.Key;
                bbf.fileBundles = ke.Value;
                bbf.mIsAsync    = PackFileEditor.IsHaveSameWinType(encrypts, (int)PackType.asy);
                bbf.mIsOnly     = !PackFileEditor.IsHaveSameWinType(encrypts, (int)PackType.part);
                bundleConfig.pathBundles[ke.Key] = bbf;
            }

            //按时间设置更新版本
            bundleConfig.versionId = MyEdior.GetTimeVersion();
            PlayerPrefs.SetInt("versionId", bundleConfig.versionId);//记录版本号
            FSaveHandle sd = FSaveHandle.Create(tempPath + "/" + ResConfig.ASSETBUNDLECONFIFILE, FFilePath.FP_Abs, FOpenType.OT_Write);
            sd.PushObject(bundleConfig);
            sd.Save();

            if (IsSpeedPack)
            {
                BuildPipeline.BuildAssetBundles(tempPath, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
            }
            else
            {
                BuildPipeline.BuildAssetBundles(tempPath, BuildAssetBundleOptions.ForceRebuildAssetBundle | BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
            }
        }
        //拷贝
        MyEdior.CopyDirectory(tempPath, path);

        EditorUtility.ClearProgressBar();
        AssetDatabase.Refresh();
        CreateStreamingConfig();

        //清空配置文件
        if (NoBundlesFiles.Count != 0)
        {
            for (int i = 0; i < NoBundlesFiles.Count; i++)
            {
                File.Delete(NoBundlesFiles[i]);
                Debug.Log("清空了其他未知文件:" + NoBundlesFiles[i]);
            }
            NoBundlesFiles.Clear();
        }
    }