Exemplo n.º 1
0
        public bool Convert(BuildOutput output, BuildCompression compression, string outputFolder, out uint[] crc, bool useCache = true)
        {
            // If enabled, try loading from cache
            var hash = CalculateInputHash(output, compression);

            if (useCache && LoadFromCache(hash, outputFolder, out crc))
            {
                return(true);
            }

            // Convert inputs
            // TODO: Validate compression settings

            crc = new uint[output.results.Length];

            // TODO: Prepare settings.outputFolder
            Directory.CreateDirectory(outputFolder);

            for (var i = 0; i < output.results.Length; i++)
            {
                var filePath = string.Format("{0}/{1}", outputFolder, output.results[i].assetBundleName);
                crc[i] = BuildInterface.ArchiveAndCompress(output.results[i].resourceFiles, filePath, compression);
            }

            // Cache results
            if (useCache)
            {
                SaveToCache(hash, output, crc, outputFolder);
            }
            return(true);
        }
Exemplo n.º 2
0
    public static void BuildAssetBundles()
    {
        var outputPath = bundleBuildPath;

        if (!Directory.Exists(outputPath))
        {
            Directory.CreateDirectory(outputPath);
        }

        var results = CompileScripts();

        var settings = new BuildSettings();

        settings.target       = EditorUserBuildSettings.activeBuildTarget;
        settings.group        = EditorUserBuildSettings.selectedBuildTargetGroup;
        settings.typeDB       = results.typeDB;
        settings.outputFolder = outputPath;

        SetupAssetVariantMapsAsset();
        var input = BuildInterface.GenerateBuildInput();

        BuildInput addressableInput;

        AddressableAssetSettings.GetDefault().GenerateBuildInput(out addressableInput);

        //input = addressableInput.Merge(input);

        BuildCommandSet commands;

        if (AssetBundleBuildPipeline.GenerateCommandSet(settings, input, out commands))
        {
            BuildOutput output;
            if (AssetBundleBuildPipeline.ExecuteCommandSet(settings, commands, out output))
            {
                var bundlesToCopy = new List <string>(output.results.Select(x => x.assetBundleName));
                CopyBundlesToStreamingAssets(bundlesToCopy);

                CreateContentCatalog(commands);
            }
        }
    }
Exemplo n.º 3
0
        public bool Convert(BuildCommandSet commands, BuildSettings settings, out BuildOutput output, bool useCache = true)
        {
            // If enabled, try loading from cache
            var hash = CalculateInputHash(commands, settings);

            if (useCache && LoadFromCache(hash, settings.outputFolder, out output))
            {
                return(true);
            }

            // Convert inputs
            foreach (var bundle in commands.commands)
            {
                // TODO: Reduce copying of value tyeps
                if (ValidateCommand(bundle))
                {
                    continue;
                }

                output = new BuildOutput();
                return(false);
            }

            // TODO: Validate settings

            // TODO: Prepare settings.outputFolder
            Directory.CreateDirectory(settings.outputFolder);

            output = BuildInterface.WriteResourceFiles(commands, settings);

            // Cache results
            if (useCache)
            {
                SaveToCache(hash, output, settings.outputFolder);
            }
            // TODO: Change this return based on if WriteResourceFiles was successful or not - Need public BuildReporting
            return(true);
        }
        public bool Convert(BuildInput input, BuildTarget target, out BuildCommandSet output, bool useCache = true)
        {
            // If enabled, try loading from cache
            var hash = CalculateInputHash(input, target);

            if (useCache && LoadFromCache(hash, out output))
            {
                return(true);
            }

            // Convert inputs
            output = new BuildCommandSet();

            if (input.definitions.IsNullOrEmpty())
            {
                return(false);
            }

            var o = -1;

            output.commands = new BuildCommandSet.Command[input.definitions.Length];
            for (var i = 0; i < input.definitions.Length; i++)
            {
                // If this definition has no assets, it's empty and we don't want to write anything out
                if (input.definitions[i].explicitAssets.IsNullOrEmpty())
                {
                    BuildLogger.LogError("Asset bundle '{0}' does not have any explicit assets defined.", input.definitions[i].assetBundleName);
                    continue;
                }
                o++;

                var allObjectIDs = new HashSet <ObjectIdentifier>();
                output.commands[o].assetBundleName = input.definitions[i].assetBundleName;
                output.commands[o].explicitAssets  = new BuildCommandSet.AssetLoadInfo[input.definitions[i].explicitAssets.Length];
                for (var j = 0; j < input.definitions[i].explicitAssets.Length; j++)
                {
                    output.commands[o].explicitAssets[j].asset   = input.definitions[i].explicitAssets[j].asset;
                    output.commands[o].explicitAssets[j].address = string.IsNullOrEmpty(input.definitions[i].explicitAssets[j].address) ?
                                                                   AssetDatabase.GUIDToAssetPath(input.definitions[i].explicitAssets[j].asset.ToString()) : input.definitions[i].explicitAssets[j].address;
                    output.commands[o].explicitAssets[j].includedObjects   = BuildInterface.GetPlayerObjectIdentifiersInAsset(input.definitions[i].explicitAssets[j].asset, target);
                    output.commands[o].explicitAssets[j].referencedObjects = BuildInterface.GetPlayerDependenciesForObjects(output.commands[i].explicitAssets[j].includedObjects, target);

                    allObjectIDs.UnionWith(output.commands[i].explicitAssets[j].includedObjects);
                    allObjectIDs.UnionWith(output.commands[i].explicitAssets[j].referencedObjects);
                }

                var k = 0;
                output.commands[o].assetBundleObjects = new BuildCommandSet.SerializationInfo[allObjectIDs.Count];
                foreach (var objectID in allObjectIDs)
                {
                    output.commands[o].assetBundleObjects[k].serializationObject = objectID;
                    output.commands[o].assetBundleObjects[k].serializationIndex  = CalculateSerializationIndexFromObjectIdentifier(objectID);
                    k++;
                }
                // Sorting is unneccessary - just makes it more human readable
                Array.Sort(output.commands[o].assetBundleObjects, kCompareer);
            }
            Array.Resize(ref output.commands, o + 1);

            // Cache results
            if (useCache)
            {
                SaveToCache(hash, output);
            }
            return(true);
        }
Exemplo n.º 5
0
        /****************************************************
         * Input
         * *************************************************/

        void Update()
        {
            //toggle contruction mode
            if (Input.GetKeyDown(toggleKey) && isActive)
            {
                Toggle();
            }

            //place the object
            if (canPlace)
            {
                InventoryManager ivty  = InventoryManager.Instance;
                BuildInterface   build = BuildInterface.Instance;
                //bool canBuild = true;
                //for (int i = 0; i < build.buildingList[build.currentBuildIndex].buildReqInfos.Count; i++)
                //{
                //    int itemId = build.buildingList[build.currentBuildIndex].buildReqInfos[i].itemId;
                //    int itemAmount = build.buildingList[build.currentBuildIndex].buildReqInfos[i].itemAmount;
                //    if (ivty.CheckItemNumInBag(itemId)<itemAmount)
                //    {
                //        canBuild = false;
                //    }
                //}
                if (build.BuildReqCheck())
                {
                    if (Input.GetKeyDown(placeKey))
                    {
                        if (mouseIsNotOnUI && isOnBuildNode)
                        {
                            PlaceGhostObject();
                            build.RemoveReqItemsFromBag();
                            AudManager.Instance.PlaySFX(3);
                        }
                        else if (!isOnBuildNode && build.buildMode == BuildInterface.BuildMode.BUILD)
                        {
                            AudManager.Instance.PlaySFX(0);
                            PlayerInterface.Instance.PrintMsg("You have to build on a node from other factories or resources", Color.red);
                        }
                    }


                    if (!faceMe)
                    {
                        if (!useContinuousRotation)
                        {
                            if (Input.GetKeyDown(positiveRotateKey))
                            {
                                AddRotation(+1, snapRotationAngle); // positive rotation
                            }
                            if (Input.GetKeyDown(negativeRotateKey))
                            {
                                AddRotation(-1, snapRotationAngle); // negative rotation
                            }
                        }
                        else
                        {
                            if (Input.GetKey(positiveRotateKey))
                            {
                                AddRotation(+1, continuousRotationSpeed * Time.deltaTime); // positive rotation
                            }
                            if (Input.GetKey(negativeRotateKey))
                            {
                                AddRotation(-1, continuousRotationSpeed * Time.deltaTime); // negative rotation
                            }
                        }
                    }
                }
                else
                {
                    PlayerInterface.Instance.PrintMsg("You don't have enough material!", Color.red);
                }
            }
        }
        public static void BuildAssetBundles()
        {
            var buildTimer = new Stopwatch();

            buildTimer.Start();

            var input       = BuildInterface.GenerateBuildInput();
            var settings    = GenerateBuildSettings();
            var compression = BuildCompression.DefaultUncompressed;

            // Rebuild sprite atlas cache for correct dependency calculation & writting
            Packer.RebuildAtlasCacheIfNeeded(settings.target, true, Packer.Execution.Normal);

            // Generate command set
            BuildCommandSet commands;
            var             packer = new Unity5Packer();

            if (!packer.Convert(input, settings.target, out commands))
            {
                return;
            }

            //DebugPrintCommandSet(ref commands);

            // Calculate dependencies
            BuildCommandSet depCommands;
            var             dependencyCalculator = new Unity5DependencyCalculator();

            if (!dependencyCalculator.Convert(commands, out depCommands))
            {
                return;
            }

            DebugPrintCommandSet(ref depCommands);

            // TODO: implement incremental building when LLAPI supports it

            // Write out resource files
            BuildOutput output;
            var         resourceWriter = new ResourceWriter();

            if (!resourceWriter.Convert(depCommands, settings, out output))
            {
                return;
            }

            // Archive and compress resource files
            uint[] crc;
            var    archiveWriter = new ArchiveWriter();

            if (!archiveWriter.Convert(output, compression, settings.outputFolder, out crc))
            {
                return;
            }

            // Generate Unity5 compatible manifest files
            string[] manifestfiles;
            var      manifestWriter = new Unity5ManifestWriter();

            if (!manifestWriter.Convert(depCommands, output, crc, settings.outputFolder, out manifestfiles))
            {
                return;
            }

            buildTimer.Stop();
            BuildLogger.Log("Build Asset Bundles complete in: {0:c}", buildTimer.Elapsed);
        }