Beispiel #1
0
    private static void LoadProductInfo()
    {
        string persistPath = Application.persistentDataPath + "/Config/ProductCfg.txt";

        if (File.Exists(persistPath))
        {
            string           info             = File.ReadAllText(persistPath);
            ProductCfgNormal productcfgnormal = JsonUtility.FromJson <ProductCfgNormal>(info);
            if (productcfgnormal != null)
            {
                foreach (var p in productcfgnormal.Products)
                {
                    ProductInfosDict[p.ProductID] = p;
                }
            }
        }
        else
        {
            ProductCfg productcfg = Resources.Load <ProductCfg>("Configs/ProductCfg");
            if (productcfg != null)
            {
                foreach (var p in productcfg.Products)
                {
                    ProductInfosDict[p.ProductID] = p;
                }
            }
        }
    }
Beispiel #2
0
    public static ProductCfg LoadFromFile(string path)
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(ProductCfg));
        var text = File.ReadAllBytes(path);

        using (MemoryStream stream = new MemoryStream(text))
        {
            ProductCfg obj = (ProductCfg)ser.ReadObject(stream);
            obj.Verify();

            return(obj);
        }
    }
Beispiel #3
0
    static void BuildAllAssetBundles()
    {
        //BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget);

        var productCfg = ProductCfg.LoadFromFile(System.IO.Path.Combine(UnityEngine.Application.dataPath, "product.json"));

        var options = BuildAssetBundleOptions.DisableWriteTypeTree
                      | BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.DeterministicAssetBundle;

        var outputRootDir = System.IO.Path.Combine(UnityEngine.Application.dataPath, "../AssetBundles");
        var textTempPath  = System.IO.Path.Combine(UnityEngine.Application.dataPath, ProductCfg.MODULES_PATH, ProductCfg.TEXT_PATH_TEMP);

        var ctx = new CreateAssetBundlesContext();

        ctx.outputRootDir   = outputRootDir;
        ctx.textTEMPPath    = textTempPath;
        ctx.options         = options;
        ctx.target          = EditorUserBuildSettings.activeBuildTarget;
        ctx.modulesRootPath = Path.Combine(UnityEngine.Application.dataPath, ProductCfg.MODULES_PATH);
        ctx.csVersion       = ModuleBuilder.GetCSVersionString();
        ctx.lobbyVersion    = ModuleBuilder.GetLobbyVersionString();

        if (Directory.Exists(outputRootDir))
        {
            Directory.Delete(outputRootDir, true);
        }

        Cleanup(ctx);

        Directory.CreateDirectory(outputRootDir);

        ModuleBuilder.BuildProductModules(productCfg, ctx);

        Cleanup(ctx);

        AssetDatabase.Refresh();

        Debug.Log("Build AssetBundles Done!");
    }
Beispiel #4
0
    public static void BuildProductModules(ProductCfg pcfg, CreateAssetBundlesContext ctx)
    {
        var abbList  = new List <AssetBundleBuild>();
        var modbList = new List <ModuleBuilder>();

        // build Lobby
        foreach (var mcfg in pcfg.Modules)
        {
            var vs = GetVersionString(mcfg.Name);
            var mb = new ModuleBuilder(mcfg, vs, ctx);
            if (mb.Build(abbList))
            {
                modbList.Add(mb);
            }
        }

        if (abbList.Count < 1)
        {
            Debug.Log("no bundle found in cfg file, nothing to do");
            return;
        }

        AssetDatabase.Refresh();
        var manifest = BuildPipeline.BuildAssetBundles(ctx.outputRootDir, abbList.ToArray(), ctx.options, ctx.target);

        if (manifest == null)
        {
            return;
        }

        // for each module, copy bundles to its folder, and generate cfg.json
        foreach (var mb in modbList)
        {
            CreateModOutputCfg(mb, ctx, manifest);
        }
    }