public static void Build()
    {
        ReadCommandLine();

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

        Directory.CreateDirectory(folderPath);
        Directory.CreateDirectory(k_TmpPath);

        IBundleBuildParameters buildParams = new BundleBuildParameters(EditorUserBuildSettings.activeBuildTarget, BuildTargetGroup.Unknown, folderPath);

        buildParams.TempOutputFolder = k_TmpPath;

        IBundleBuildContent buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds());
        IBundleBuildResults results;

        List <IBuildTask> taskList = DefaultBuildTasks.Create(DefaultBuildTasks.Preset.AssetBundleBuiltInShaderExtraction) as List <IBuildTask>;

        taskList.Add(new RefreshAssetDatabase());

        // we add a callback after generating information about how to build each bundle
        ContentPipeline.BuildCallbacks.PostPackingCallback += PostPackingCallback;

        ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results, taskList);

        Debug.Log("Building completed with " + exitCode);
    }
예제 #2
0
        public void BuildPipeline_AssetBundleBuild_WritesLinkXMLFile()
        {
            IBundleBuildParameters buildParameters = GetBuildParameters();

            buildParameters.WriteLinkXML = true;
            IBundleBuildContent buildContent = GetBundleContent();
            IBundleBuildResults results;

            ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out results);

            Assert.AreEqual(ReturnCode.Success, exitCode);


            var assemblies = new HashSet <Assembly>();
            var types      = new HashSet <Type>();

            foreach (var writeResult in results.WriteResults)
            {
                foreach (var type in writeResult.Value.includedTypes)
                {
                    assemblies.Add(type.Assembly);
                    types.Add(type);
                }
            }

            var xml = LinkXMLGeneratorTests.ReadLinkXML(buildParameters.GetOutputFilePathForIdentifier("link.xml"), out int assemblyCount, out int typeCount);

            Assert.AreEqual(assemblyCount, assemblies.Count);
            Assert.AreEqual(typeCount, types.Count);
            foreach (var t in types)
            {
                LinkXMLGeneratorTests.AssertTypePreserved(xml, t);
            }
        }
예제 #3
0
        public GameObject RunPipeline()
        {
            if (!RoadNetworkSourceExists())
            {
                return(null);
            }

            var        pipeline = new ContentPipeline();
            GameObject generatedObjects;

            try
            {
                generatedObjects = roadNetworkSource == RoadNetworkSource.OpenDrive
                    ? RunOpenDrivePipeline(pipeline)
                    : RunSplineBasedRoadNetworkPipeline(pipeline);
            }
            catch
            {
                pipeline.Dispose();
                throw;
            }

            pipeline.Dispose();
            return(generatedObjects);
        }
    /// <summary>
    /// SBP构建
    /// </summary>
    /// <returns>The build pipeline.</returns>
    ReturnCode ScriptableBuildPipeline()
    {
        var buildContent = GetBundleContent();        //new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds());
        var buildParams  = new BundleBuildParameters(settings.buildTarget, settings.buildGroup, settings.outputPath);

        if (settings.compressionType == CompressionType.None)
        {
            buildParams.BundleCompression = BuildCompression.DefaultUncompressed;
        }
        else if (settings.compressionType == CompressionType.Lzma)
        {
            buildParams.BundleCompression = BuildCompression.DefaultLZMA;
        }
        else if (settings.compressionType == CompressionType.Lz4 || settings.compressionType == CompressionType.Lz4HC)
        {
            buildParams.BundleCompression = BuildCompression.DefaultLZ4;
        }

        IBundleBuildResults results;
        ReturnCode          exitCode;


        exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results);

        return(exitCode);
    }
        internal ReturnCode RefreshBuild(AddressableAssetsBuildContext buildContext)
        {
            var settings = buildContext.settings;
            var context  = new AddressablesDataBuilderInput(settings);

            var buildTarget      = context.Target;
            var buildTargetGroup = context.TargetGroup;
            var buildParams      = new AddressableAssetsBundleBuildParameters(settings, m_BundleToAssetGroup, buildTarget,
                                                                              buildTargetGroup, settings.buildSettings.bundleBuildPath);
            var builtinShaderBundleName =
                settings.DefaultGroup.Name.ToLower().Replace(" ", "").Replace('\\', '/').Replace("//", "/") +
                "_unitybuiltinshaders.bundle";
            var buildTasks = RuntimeDataBuildTasks(builtinShaderBundleName);

            buildTasks.Add(m_ExtractData);

            IBundleBuildResults buildResults;
            var exitCode = ContentPipeline.BuildAssetBundles(buildParams, new BundleBuildContent(m_AllBundleInputDefs),
                                                             out buildResults, buildTasks, buildContext);

            using (var progressTracker = new UnityEditor.Build.Pipeline.Utilities.ProgressTracker())
            {
                progressTracker.UpdateTask("Generating Addressables Locations");
                GenerateLocationListsTask.Run(buildContext, m_ExtractData.WriteData);
            }

            return(exitCode);
        }
예제 #6
0
        public static void Build(Setting setting)
        {
            if (setting == null)
            {
                return;
            }

            var path = setting.BuildInfo.OutputPath;

            if (!Path.IsPathRooted(path))
            {
                path = Path.GetFullPath(Path.Combine(Application.dataPath, "..", path));
            }

            var buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds());
            var buildParam   = new BundleBuildParameters(setting.BuildInfo.Target, setting.BuildInfo.TargetGroup, path);

            buildParam.ScriptOptions     = ScriptCompilationOptions.None;
            buildParam.BundleCompression = UnityEngine.BuildCompression.LZ4;

            var settingContext = new LibCraftopiaSetting(setting);

            var tasks = BuildPipeline.CreatPipeline();

            var code = ContentPipeline.BuildAssetBundles(buildParam, buildContent, out var result, tasks, settingContext);

            if (code < 0)
            {
                UnityEngine.Debug.LogError("Build failed");
            }
        }
    /// <summary>
    /// The BundleBuildContent class contains information about all of the Assets you want to build into the BuildMap
    /// Assets are referenced to by a GUID object, and the Addresses can be obtained and modified by using a GUID to
    /// refer to each asset and identify its Address
    /// </summary>
    /// <param name="outputPath"></param>
    /// <param name="compressionMode"></param>
    /// <param name="buildTarget"></param>
    /// <param name="buildGroup"></param>
    /// <param name="results"></param>
    /// <returns></returns>
    public static ReturnCode BuildAssetBundles(string outputPath, CompressionType compressionMode, BuildTarget buildTarget, BuildTargetGroup buildGroup, out IBundleBuildResults results)
    {
        BundleBuildContent buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds());

        // Go through assets content and set their address to its filename
        for (int i = 0; i < buildContent.Assets.Count; ++i)
        {
            GUID g = buildContent.Assets[i];
            // Get the current address as the full filepath and change it to just be the filename
            buildContent.Addresses[g] = Path.GetFileNameWithoutExtension(buildContent.Addresses[g]);
        }

        BundleBuildParameters buildParams = new BundleBuildParameters(buildTarget, buildGroup, outputPath);

        switch (compressionMode)
        {
        case CompressionType.None:
            buildParams.BundleCompression = BuildCompression.Uncompressed;
            break;

        case CompressionType.Lz4:
            buildParams.BundleCompression = BuildCompression.LZ4;
            break;

        default:
            buildParams.BundleCompression = BuildCompression.LZMA;
            break;
        }

        return(ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results));
    }
예제 #8
0
        public IEnumerator BuildPipeline_AssetBundleBuild_DoesNotResetUnsavedScene()
        {
            Scene s = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene);

            yield return(null);

            EditorSceneManager.SaveScene(s, k_ScenePath);
            GameObject.CreatePrimitive(PrimitiveType.Cube);
            EditorSceneManager.MarkSceneDirty(s);

            GameObject objectWeAdded = GameObject.Find("Cube");

            Assert.IsNotNull(objectWeAdded, "No object before entering playmode");
            Assert.AreEqual("testScene", SceneManager.GetActiveScene().name);

            IBundleBuildParameters buildParameters = GetBuildParameters();
            IBundleBuildContent    buildContent    = GetBundleContent();
            IBundleBuildResults    results;

            ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out results);

            Assert.AreEqual(ReturnCode.UnsavedChanges, exitCode);

            Assert.AreEqual("testScene", SceneManager.GetActiveScene().name);
            objectWeAdded = GameObject.Find("Cube");
            Assert.IsNotNull(objectWeAdded, "No object after entering playmode");

            EditorSceneManager.SaveScene(s, k_ScenePath);
        }
예제 #9
0
        public void BuildAssetBundles_WithCache_Succeeds()
        {
            IBundleBuildParameters buildParameters = GetBuildParameters();
            IBundleBuildContent    buildContent    = GetBundleContent(true);

            ReturnCode exitCode = ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out IBundleBuildResults results);

            Assert.AreEqual(ReturnCode.Success, exitCode);
        }
예제 #10
0
        GameObject RunOpenDrivePipeline(ContentPipeline pipeline)
        {
            var parentObject = new GameObject("Placed Road Objects");

//            if (useEcsRoadNetwork)
//            {
//                pipeline.RunGenerator<RoadNetworkDescriptionToEcsSystem, RoadNetworkDescriptionToEcsSystemParameters>(new RoadNetworkDescriptionToEcsSystemParameters()
//                {
//                    roadNetworkDescription = roadNetworkDescription
//                });
//                pipeline.RunGenerator<GeneratePolygonsFromEcsSystem, PolygonSystemFromEcsParameters>(new PolygonSystemFromEcsParameters()
//                {
//                    minimumPolygonArea = MinimumPolygonArea,
//                    extensionDistance = ExtensionDistance,
//                    processingScheme = processingScheme
//                });
//            }
//            else
//            {
            pipeline.RunGenerator <PlacementPathsFromPolygonsSystem, PolygonSystemParameters>(new PolygonSystemParameters()
            {
                roadNetworkDescription = roadNetworkDescription,
                minimumPolygonArea     = MinimumPolygonArea,
                extensionDistance      = ExtensionDistance,
                outermostLaneType      = BorderLaneType
            });
//            }

            pipeline.RunGenerator <MeshFromPolygonsSystem, MeshFromPolygonsParameters>(new MeshFromPolygonsParameters()
            {
                Material     = roadMaterial,
                Parent       = parentObject.transform,
                UVMultiplier = uvMultiplier
            });

            if (createRoadMesh)
            {
                pipeline.RunGenerator <MeshFromPolygonsSystem, MeshFromPolygonsParameters>(new MeshFromPolygonsParameters()
                {
                    Material     = roadMaterial,
                    Parent       = parentObject.transform,
                    UVMultiplier = uvMultiplier
                });
            }

            if (drawRoadOutline)
            {
                pipeline.RunGenerator <PolygonDrawingSystem, PolygonDrawingParameters>(new PolygonDrawingParameters
                {
                    parent = parentObject.transform
                });
            }

            ExecutePlacementAlgorithms(pipeline, parentObject);

            return(parentObject);
        }
예제 #11
0
        static ReturnCode WriteSceneBundles(BundleBuildParameters parameters, string[] scenes)
        {
            var bundles = new AssetBundleBuild[1];

            bundles[0].assetBundleName = "scenes.bundle";
            bundles[0].assetNames      = scenes;

            var content = new BundleBuildContent(bundles);

            return(ContentPipeline.BuildAssetBundles(parameters, content, out var result));
        }
예제 #12
0
        internal ReturnCode CreateCatalogBundle(string filepath, string jsonText, AddressablesDataBuilderInput builderInput)
        {
            if (string.IsNullOrEmpty(filepath) || string.IsNullOrEmpty(jsonText) || builderInput == null)
            {
                throw new ArgumentException("Unable to create catalog bundle (null arguments).");
            }

            // A bundle requires an actual asset
            var tempFolderName = "TempCatalogFolder";
            var tempFolderPath = Path.Combine(AddressableAssetSettingsDefaultObject.kDefaultConfigFolder, tempFolderName);
            var tempFilePath   = Path.Combine(tempFolderPath, Path.GetFileName(filepath).Replace(".bundle", ".json"));

            if (!WriteFile(tempFilePath, jsonText, builderInput.Registry))
            {
                throw new Exception("An error occured during the creation of temporary files needed to bundle the content catalog.");
            }

            AssetDatabase.Refresh();

            var bundleBuildContent = new BundleBuildContent(new[]
            {
                new AssetBundleBuild()
                {
                    assetBundleName  = Path.GetFileName(filepath),
                    assetNames       = new[] { tempFilePath },
                    addressableNames = new string[0]
                }
            });

            var buildTasks = new List <IBuildTask>
            {
                new CalculateAssetDependencyData(),
                new GenerateBundlePacking(),
                new GenerateBundleCommands(),
                new WriteSerializedFiles(),
                new ArchiveAndCompressBundles()
            };

            var buildParams = new BundleBuildParameters(builderInput.Target, builderInput.TargetGroup, Path.GetDirectoryName(filepath));
            var retCode     = ContentPipeline.BuildAssetBundles(buildParams, bundleBuildContent, out IBundleBuildResults result, buildTasks);

            if (Directory.Exists(tempFolderPath))
            {
                Directory.Delete(tempFolderPath, true);
                builderInput.Registry.RemoveFile(tempFilePath);
            }

            if (File.Exists(filepath))
            {
                builderInput.Registry.AddFile(filepath);
            }

            return(retCode);
        }
예제 #13
0
        GameObject RunSplineBasedRoadNetworkPipeline(ContentPipeline pipeline)
        {
            var parentObject  = new GameObject("Placed Road Objects");
            var roadObject    = new GameObject("Road");
            var networkToMesh = splineBasedRoadNetwork.GetComponent <RoadPathNetworkToMesh>();

            networkToMesh.generateRoadMesh = createRoadMesh;
            networkToMesh.GenerateRoadMesh(pipeline, roadObject);
            ExecutePlacementAlgorithms(pipeline, parentObject);
            roadObject.transform.parent = parentObject.transform;
            return(parentObject);
        }
예제 #14
0
        private void Apply(InstancedModel model)
        {
            if (model == null || Texture == null)
            {
                return;
            }

            var random     = new Random(Seed);
            var transforms = new List <Matrix>();
            var texture    = ContentPipeline.LoadContent <Texture2DContent>(Texture.Filename, new Microsoft.Xna.Framework.Content.Pipeline.TextureImporter());

            texture.ConvertBitmapType(typeof(PixelBitmapContent <float>));

            var map = (PixelBitmapContent <float>)texture.Mipmaps[0];

            for (int z = 0; z < map.Height; z++)
            {
                for (int x = 0; x < map.Width; ++x)
                {
                    var probability = map.GetPixel(x, z) * Density * 0.0001 * Step * Step;
                    var count       = (int)Math.Floor(probability);
                    if (random.NextDouble() < probability - count)
                    {
                        count++;
                    }

                    for (int i = 0; i < count; ++i)
                    {
                        var xx = random.NextDouble();
                        var zz = random.NextDouble();

                        Matrix transform = new Matrix();
                        transform.M11 = transform.M33 = HorizontalScale.Min + (float)random.NextDouble() * (HorizontalScale.Max - HorizontalScale.Min);
                        transform.M22 = VerticalScale.Min + (float)random.NextDouble() * (VerticalScale.Max - VerticalScale.Min);
                        transform.M44 = 1;

                        if (RandomizeRotation)
                        {
                            Matrix rotation;
                            Matrix.CreateRotationY((float)random.NextDouble() * MathHelper.Pi * 2, out rotation);
                            Matrix.Multiply(ref transform, ref rotation, out transform);
                        }

                        transform.M41 = (x * Step) + (float)(xx * Step);
                        transform.M43 = (z * Step) + (float)(zz * Step);

                        transforms.Add(transform);
                    }
                }
            }

            model.SetInstanceTransforms(transforms.ToArray());
        }
예제 #15
0
        public static byte[] Compile(string effectCode)
        {
            using (var stream = new FileStream(Path.Combine(Path.GetTempPath(), Path.GetTempFileName()), FileMode.Create))
            {
                var writer = new StreamWriter(stream);
                writer.Write(effectCode);
                writer.Flush();
                stream.Seek(0, SeekOrigin.Begin);

                return(ContentPipeline.LoadContent <CompiledEffectContent>(stream
                                                                           , new Microsoft.Xna.Framework.Content.Pipeline.EffectImporter()
                                                                           , new EffectProcessor()).GetEffectCode());
            }
        }
예제 #16
0
        public void BuildAssetBundles_WhenBuildLogProvided_DoesNotCreatePerformanceLogReport()
        {
            IBundleBuildParameters buildParameters = GetBuildParameters();
            IBundleBuildContent    buildContent    = GetBundleContent();
            IBundleBuildResults    results;

            var taskList = DefaultBuildTasks.Create(DefaultBuildTasks.Preset.AssetBundleCompatible);

            ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out results, taskList, new BuildLog());

            string tepBuildLog = buildParameters.GetOutputFilePathForIdentifier("buildlogtep.json");

            FileAssert.DoesNotExist(tepBuildLog);
        }
예제 #17
0
        public void BuildAssetBundles_WhenNoBuildInContextLog_CreatesPerformanceLogReport()
        {
            IBundleBuildParameters buildParameters = GetBuildParameters();
            IBundleBuildContent    buildContent    = GetBundleContent();
            IBundleBuildResults    results;

            buildParameters.Group = EditorUserBuildSettings.selectedBuildTargetGroup;

            ContentPipeline.BuildAssetBundles(buildParameters, buildContent, out results);

            string tepBuildLog = buildParameters.GetOutputFilePathForIdentifier("buildlogtep.json");

            FileAssert.Exists(tepBuildLog);
        }
        public void CreateRoadFromInspector()
        {
            if (roadBuilderParameters.parentObject != null)
            {
                DestroyImmediate(roadBuilderParameters.parentObject);
            }

            var parentObject = new GameObject("Road Mesh");

            using (var pipeline = new ContentPipeline())
            {
                GenerateRoadMesh(pipeline, parentObject);
            }
        }
예제 #19
0
        /// <summary> 指定されたアセットバンドルをビルド </summary>
        public BuildResult Build(string outputPath, AssetBundleBuild[] buildMap)
        {
            var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(BuildTarget);

            var buildParams = new BundleBuildParameters(BuildTarget, buildTargetGroup, outputPath)
            {
                BundleCompression = BuildCompression.LZ4,
            };

            var buildContent = new BundleBuildContent(buildMap);

            var tasks = DefaultBuildTasks.Create(DefaultBuildTasks.Preset.AssetBundleBuiltInShaderExtraction);

            var exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out var results, tasks);

            return(new BuildResult(exitCode, results));
        }
    public static void Build()
    {
        var buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds());
        var buildParams  = new CustomBuildParameters(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.selectedBuildTargetGroup, "Assets/StreamingAssets");

        // set three different Assetbundles to be the different compression options available
        buildParams.m_PerBundleCompression.Add("textures", BuildCompression.LZMA);
        buildParams.m_PerBundleCompression.Add("objects", BuildCompression.LZ4);
        buildParams.m_PerBundleCompression.Add("prefabs", BuildCompression.Uncompressed);

        buildParams.BundleCompression = BuildCompression.LZMA;

        IBundleBuildResults results;
        ReturnCode          exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results);

        Debug.Log("Building per bundle completed with " + exitCode);
    }
예제 #21
0
        /// <summary>
        /// Loads an asset.
        /// </summary>
        /// <param name="asset">The Asset.</param>
        /// <param name="type">The Type.</param>
        /// <returns>IContent.</returns>
        private IContent Load(string asset, Type type)
        {
            IContent data;

            if (QueryCache(asset, type, out data))
            {
                return(data);
            }

            if (!File.Exists(Path.Combine(RootPath, asset)))
            {
                throw new ContentLoadException("Asset not found.");
            }

            data = ContentPipeline.ProcessDatatype(Path.Combine(RootPath, asset), type);
            ApplyCache(asset, data);

            return(data);
        }
예제 #22
0
        static ReturnCode WriteRenderPipelineBundles(BundleBuildParameters parameters)
        {
            var srp = UnityEngine.Rendering.GraphicsSettings.defaultRenderPipeline;

            if (srp == null)
            {
                return(ReturnCode.SuccessNotRun);
            }

            var bundles = new AssetBundleBuild[1];

            bundles[0].assetBundleName  = "renderpipeline.bundle";
            bundles[0].assetNames       = new[] { AssetDatabase.GetAssetPath(UnityEngine.Rendering.GraphicsSettings.defaultRenderPipeline) };
            bundles[0].addressableNames = new[] { "DefaultRenderPipeline" };

            var content = new BundleBuildContent(bundles);

            return(ContentPipeline.BuildAssetBundles(parameters, content, out var result));
        }
예제 #23
0
        static ReturnCode WriteResourcesBundles(BundleBuildParameters parameters)
        {
            // Resources loading path handling has a few rules:
            // - Paths are relative to resources folder
            // - Paths are lowercase
            // - Paths have extensions removed
            // So "C:\Project\Assets\MyGame\Resources\SO\SomeAsset.asset" becomes "so\someAsset"
            // On the loading side, all paths passed in have ToLower() run on them.
            var assetPaths = GetResourcesAssetPaths();
            var bundles    = new AssetBundleBuild[]
            {
                new AssetBundleBuild()
                {
                    assetBundleName  = "resources.bundle",
                    assetNames       = assetPaths.Select(x => x.ToString()).ToArray(),
                    addressableNames = assetPaths.Select(x =>
                    {
                        const string k_Folder    = "/resources/";
                        const int k_FolderLength = 11;

                        // Hack for PostProcessing stack
                        var shader = AssetDatabase.LoadAssetAtPath <Shader>(x.ToString());
                        if (shader != null)
                        {
                            return(shader.name.ToLower());
                        }

                        var path  = x.ChangeExtension("").ToString().ToLower();
                        var index = path.ToLower().LastIndexOf(k_Folder);
                        if (index > -1)
                        {
                            path = path.Substring(index + k_FolderLength);
                        }
                        return(path);
                    }).ToArray()
                }
            };

            var content = new BundleBuildContent(bundles);

            return(ContentPipeline.BuildAssetBundles(parameters, content, out var result));
        }
예제 #24
0
        /// <summary>
        /// Initializes a new ContentManager.
        /// </summary>
        public ContentManager()
        {
            RootPath        = Path.Combine(Environment.CurrentDirectory, "Content");
            ContentVerifier = new ContentVerifier();
            ContentPipeline = new ContentPipeline();

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

            _contentCache = new Dictionary <string, IContent>();
            _batchList    = new List <IBatch>();

            //add build in factories
            ContentPipeline.Attach(new AudioSourceFactory());
            ContentPipeline.Attach(new TextFileFactory());
            ContentPipeline.Attach(new ScriptFileFactory());
            ContentPipeline.Attach(new Texture2DFactory());
            ContentPipeline.Attach(new AudioEffectFactory());
        }
예제 #25
0
        internal ReturnCode RefreshBuild(AddressableAssetsBuildContext buildContext)
        {
            var settings = buildContext.Settings;
            var context = new AddressablesDataBuilderInput(settings);

            var buildTarget = context.Target;
            var buildTargetGroup = context.TargetGroup;
            var buildParams = new AddressableAssetsBundleBuildParameters(settings, m_BundleToAssetGroup, buildTarget,
                buildTargetGroup, settings.buildSettings.bundleBuildPath);
            var builtinShaderBundleName =
                settings.DefaultGroup.Name.ToLower().Replace(" ", "").Replace('\\', '/').Replace("//", "/") +
                "_unitybuiltinshaders.bundle";
            var buildTasks = RuntimeDataBuildTasks(builtinShaderBundleName);
            buildTasks.Add(m_ExtractData);

            IBundleBuildResults buildResults;
            var exitCode = ContentPipeline.BuildAssetBundles(buildParams, new BundleBuildContent(m_AllBundleInputDefs),
                out buildResults, buildTasks, buildContext);

            return exitCode;
        }
        public void GenerateRoadMesh(
            ContentPipeline pipeline,
            GameObject parentObject,
            RoadConditionConfiguration roadConditionConfig = null)
        {
            Profiler.BeginSample("GenerateRoadMesh");
            m_RoadPathNetwork = GetComponent <RoadPathNetwork>();

            materialParams.parentObject         = parentObject;
            roadBuilderParameters.parentObject  = parentObject;
            debugDrawingParameters.parentObject = parentObject;
            cameraPathParameters.parentObject   = parentObject;

            roadBuilderParameters.baseRandomSeed = baseRandomSeed;

            var roadPathParams = new RoadPathNetworkToEcsParameters {
                network = m_RoadPathNetwork
            };

            // TODO: Validate roadBuilderParameter inputs
            pipeline.RunGenerator <RoadPathNetworkToEcsSystem, RoadPathNetworkToEcsParameters>(roadPathParams);
            pipeline.RunGenerator <RoadBuilderSystem, RoadBuilderParameters>(roadBuilderParameters);
            if (generateRoadMesh)
            {
                pipeline.RunGenerator <AssembleMeshSystem, RoadMaterialParameters>(materialParams);
            }
            pipeline.RunGenerator <CreateRoadEdgePathsSystem>();
            pipeline.RunGenerator <CameraPathSystem, CameraPathParameters>(cameraPathParameters);
            pipeline.RunGenerator <DebugDrawingSystem, DebugDrawingParameters>(debugDrawingParameters);

#if HDRP_PRESENT
            manholeCoverPlacementParameters.parentObject   = parentObject;
            manholeCoverPlacementParameters.baseRandomSeed = roadBuilderParameters.baseRandomSeed;
            pipeline.RunGenerator <ManholeCoverPlacementSystem, ManholeCoverPlacementParameters>(manholeCoverPlacementParameters);
#endif

            parentObject.AddComponent <RoadConditionAssigner>();
            Profiler.EndSample();
        }
예제 #27
0
    public static void Build()
    {
        var buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds());
        var buildParams  = new CustomBuildParameters(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.selectedBuildTargetGroup, "Assets/StreamingAssets");

        // This is a part of the CustomBuildParameters class that override the outputFolder on a per AssetBundle basic
        buildParams.m_PerBundleBuildFolder.Add("textures", "Assets/StreamingAssets/OtherFolder");

        // This is a part of the CustomBuildParameters class that ignores the outputFolder, and gives a direct location, including the filename. On a per AssetBundle basic
        buildParams.m_PerBundleAbsolutePath.Add("prefabs", Application.dataPath.Substring(0, Application.dataPath.Length - 6) + "myPrefabObjects.ab");

        buildParams.BundleCompression = BuildCompression.LZMA;

        List <IBuildTask> taskList = DefaultBuildTasks.Create(DefaultBuildTasks.Preset.AssetBundleBuiltInShaderExtraction) as List <IBuildTask>;

        //taskList.Add( new MoveAssetBundles() ); // no longer needed from "1.2.3-preview" as can use
        taskList.Add(new RefreshAssetDatabase());

        IBundleBuildResults results;
        ReturnCode          exitCode = ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results, taskList);

        Debug.Log("Building per bundle completed with " + exitCode);
    }
예제 #28
0
        /// <summary>
        /// Loads an asset.
        /// </summary>
        /// <typeparam name="T">The Type.</typeparam>
        /// <param name="asset">The Asset.</param>
        /// <returns>T.</returns>
        public T Load <T>(string asset) where T : IContent
        {
            //make the path valid if not
            asset = asset.Replace("/", @"\");

            //query content cache first.
            T data;

            if (QueryCache(asset, out data))
            {
                return(data);
            }

            if (!File.Exists(Path.Combine(RootPath, asset)))
            {
                throw new ContentLoadException("Asset not found.");
            }

            data = ContentPipeline.ProcessDatatype <T>(Path.Combine(RootPath, asset));
            ApplyCache(asset, data);

            return(data);
        }
예제 #29
0
        public static void Build()
        {
            Clear();
            var Mods   = ModsEditor.GetMods();
            int length = Mods.Length;

            for (int i = 0; i < length; i++)
            {
                var ModInfo         = ModsEditor.GetModInfo(Mods[i]);
                var ModOutPutFolder = OutPutFolder + "/" + ModInfo.PackageName;
                Directory.CreateDirectory(ModOutPutFolder);

                //生成ModInfo文件
                using (StreamWriter sw = File.CreateText(ModOutPutFolder + "/" + ModInfo.PackageName + ".json"))
                {
                    sw.Write(JsonConvert.SerializeObject(ModInfo));
                }

                //Windows64版本构建
                //构建参数
                var param = new BundleBuildParameters(BuildTarget.StandaloneWindows64, BuildTargetGroup.Standalone, ModOutPutFolder);
                param.BundleCompression = BuildCompression.LZ4;
                //填入资源
                var content = new BundleBuildContent(new AssetBundleBuild[] { GetAllAssets(ModInfo, "winmod") });
                IBundleBuildResults results;
                //构建包
                ReturnCode code = ContentPipeline.BuildAssetBundles(param, content, out results);
                if (code != ReturnCode.Success)
                {
                    if (code == ReturnCode.Canceled)
                    {
                        return;//如果取消,直接返回
                    }
                    Debug.LogError("构建失败!错误原因:" + code.ToString());
                }
            }
        }
    public static ReturnCode BuildAssetBundles(string outputPath, CompressionType compressionMode, BuildTarget buildTarget, BuildTargetGroup buildGroup, out IBundleBuildResults results)
    {
        BundleBuildContent    buildContent = new BundleBuildContent(ContentBuildInterface.GenerateAssetBundleBuilds());
        BundleBuildParameters buildParams  = new BundleBuildParameters(buildTarget, buildGroup, outputPath);

        SetupBuildCacheServer(buildParams);

        switch (compressionMode)
        {
        case CompressionType.None:
            buildParams.BundleCompression = BuildCompression.Uncompressed;
            break;

        case CompressionType.Lz4:
            buildParams.BundleCompression = BuildCompression.LZ4;
            break;

        default:
            buildParams.BundleCompression = BuildCompression.LZMA;
            break;
        }

        return(ContentPipeline.BuildAssetBundles(buildParams, buildContent, out results));
    }