/// <summary>
        /// Move custom asset pack data from their build location to their App Bundle data location.
        /// </summary>
        /// <param name="buildPlayerContext">Contains data related to the player.</param>
        public static void MoveDataForAppBundleBuild(BuildPlayerContext buildPlayerContext)
        {
            try
            {
                buildPlayerContext.AddAdditionalPathToStreamingAssets(CustomAssetPackUtility.CustomAssetPacksDataEditorPath, CustomAssetPackUtility.kCustomAssetPackDataFilename);

                AssetDatabase.StartAssetEditing();
                if (File.Exists(CustomAssetPackUtility.BuildProcessorDataPath))
                {
                    string contents = File.ReadAllText(CustomAssetPackUtility.BuildProcessorDataPath);
                    var    data     = JsonUtility.FromJson <BuildProcessorData>(contents);

                    foreach (BuildProcessorDataEntry entry in data.Entries)
                    {
                        string assetsFolderPath = Path.Combine(CustomAssetPackUtility.PackContentRootDirectory, entry.AssetsSubfolderPath);
                        if (File.Exists(entry.BundleBuildPath))
                        {
                            string metaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(entry.BundleBuildPath);
                            File.Move(entry.BundleBuildPath, assetsFolderPath);
                            File.Delete(metaFilePath);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogError($"Exception occured when moving data for an app bundle build: {e.Message}.");
            }
            finally
            {
                AssetDatabase.StopAssetEditing();
            }
        }
        internal static BuildPlayerContext PreparePlayerBuild(BuildPlayerOptions buildPlayerOptions)
        {
            var buildPlayerContext = new BuildPlayerContext(buildPlayerOptions);

            BuildPipelineInterfaces.PreparePlayerBuild(buildPlayerContext);
            return(buildPlayerContext);
        }
 /// <summary>
 /// Invoked before performing a Player build. Moves AssetBundles to their correct data location based on the build target platform.
 /// </summary>
 /// <param name="buildPlayerContext">Contains data related to the player.</param>
 public override void PrepareForBuild(BuildPlayerContext buildPlayerContext)
 {
     if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android && EditorUserBuildSettings.buildAppBundle)
     {
         MoveDataForAppBundleBuild(buildPlayerContext);
     }
     else
     {
         MoveDataToDefaultLocation();
     }
 }
Example #4
0
    internal static void PrepareForPlayerbuild(AddressableAssetSettings settings, BuildPlayerContext buildPlayerContext, bool buildAddressables)
    {
        if (settings != null && buildAddressables)
        {
            AddressablesPlayerBuildResult result;
            if (BuildAddressablesOverride != null)
            {
                try
                {
                    result = BuildAddressablesOverride.Invoke(settings);
                }
                catch (Exception e)
                {
                    result       = new AddressablesPlayerBuildResult();
                    result.Error = "Exception in BuildAddressablesOverride: " + e;
                }
            }
            else
            {
                AddressableAssetSettings.BuildPlayerContent(out result);
            }

            if (result != null && !string.IsNullOrEmpty(result.Error))
            {
                Debug.LogError($"Failed to build Addressables content, content not included in Player Build. \"{result.Error}\"");
            }
        }

        if (buildPlayerContext != null)
        {
            var streamingAssetValues = GetStreamingAssetPaths();
            foreach (KeyValuePair <string, string> streamingAssetValue in streamingAssetValues)
            {
                buildPlayerContext.AddAdditionalPathToStreamingAssets(streamingAssetValue.Key,
                                                                      streamingAssetValue.Value);
            }
        }

        string buildPath = Addressables.BuildPath + "/AddressablesLink/link.xml";

        if (File.Exists(buildPath))
        {
            string projectPath = GetLinkPath(settings, true);
            File.Copy(buildPath, projectPath, true);
            AssetDatabase.ImportAsset(projectPath, ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.DontDownloadFromCacheServer);
        }
    }
Example #5
0
    /// <summary>
    /// Invoked before performing a Player build. Maintains building Addressables step and processing Addressables build data.
    /// </summary>
    /// <param name="buildPlayerContext"></param>
    public override void PrepareForBuild(BuildPlayerContext buildPlayerContext)
    {
        var settings = AddressableAssetSettingsDefaultObject.Settings;

        PrepareForPlayerbuild(settings, buildPlayerContext, ShouldBuildAddressablesForPlayerBuild(settings));
    }