83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
using System;
 | 
						|
using System.Linq;
 | 
						|
using System.Reflection;
 | 
						|
using UnityBuilderAction.Input;
 | 
						|
using UnityBuilderAction.Reporting;
 | 
						|
using UnityBuilderAction.Versioning;
 | 
						|
using UnityEditor;
 | 
						|
using UnityEditor.Build.Reporting;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace UnityBuilderAction
 | 
						|
{
 | 
						|
  static class Builder
 | 
						|
  {
 | 
						|
    public static void BuildProject()
 | 
						|
    {
 | 
						|
      // Gather values from args
 | 
						|
      var options = ArgumentsParser.GetValidatedOptions();
 | 
						|
 | 
						|
      // Gather values from project
 | 
						|
      var scenes = EditorBuildSettings.scenes.Where(scene => scene.enabled).Select(s => s.path).ToArray();
 | 
						|
      
 | 
						|
      // Get all buildOptions from options
 | 
						|
      BuildOptions buildOptions = BuildOptions.None;
 | 
						|
      foreach (string buildOptionString in Enum.GetNames(typeof(BuildOptions))) {
 | 
						|
        if (options.ContainsKey(buildOptionString)) {
 | 
						|
          BuildOptions buildOptionEnum = (BuildOptions) Enum.Parse(typeof(BuildOptions), buildOptionString);
 | 
						|
          buildOptions |= buildOptionEnum;
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      // Define BuildPlayer Options
 | 
						|
      var buildPlayerOptions = new BuildPlayerOptions {
 | 
						|
        scenes = scenes,
 | 
						|
        locationPathName = options["customBuildPath"],
 | 
						|
        target = (BuildTarget) Enum.Parse(typeof(BuildTarget), options["buildTarget"]),
 | 
						|
        options = buildOptions
 | 
						|
      };
 | 
						|
 | 
						|
      // Set version for this build
 | 
						|
      VersionApplicator.SetVersion(options["buildVersion"]);
 | 
						|
      
 | 
						|
      // Apply Android settings
 | 
						|
      if (buildPlayerOptions.target == BuildTarget.Android)
 | 
						|
      {
 | 
						|
        VersionApplicator.SetAndroidVersionCode(options["androidVersionCode"]);
 | 
						|
        AndroidSettings.Apply(options);
 | 
						|
      }
 | 
						|
      
 | 
						|
      // Execute default AddressableAsset content build, if the package is installed.
 | 
						|
      // Version defines would be the best solution here, but Unity 2018 doesn't support that,
 | 
						|
      // so we fall back to using reflection instead.
 | 
						|
      var addressableAssetSettingsType = Type.GetType(
 | 
						|
        "UnityEditor.AddressableAssets.Settings.AddressableAssetSettings,Unity.Addressables.Editor");
 | 
						|
      if (addressableAssetSettingsType != null)
 | 
						|
      {
 | 
						|
        // ReSharper disable once PossibleNullReferenceException, used from try-catch
 | 
						|
        try
 | 
						|
        {
 | 
						|
          addressableAssetSettingsType.GetMethod("CleanPlayerContent", BindingFlags.Static | BindingFlags.Public)
 | 
						|
                .Invoke(null, new object[] {null});
 | 
						|
          addressableAssetSettingsType.GetMethod("BuildPlayerContent", new Type[0]).Invoke(null, new object[0]);
 | 
						|
        }
 | 
						|
        catch (Exception e)
 | 
						|
        {
 | 
						|
          Debug.LogError($"Failed to run default addressables build:\n{e}");
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      // Perform build
 | 
						|
      BuildReport buildReport = BuildPipeline.BuildPlayer(buildPlayerOptions);
 | 
						|
 | 
						|
      // Summary
 | 
						|
      BuildSummary summary = buildReport.summary;
 | 
						|
      StdOutReporter.ReportSummary(summary);
 | 
						|
 | 
						|
      // Result
 | 
						|
      BuildResult result = summary.result;
 | 
						|
      StdOutReporter.ExitWithResult(result);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |