Skip to content

Instantly share code, notes, and snippets.

@favoyang
Last active August 14, 2023 06:29
Show Gist options
  • Save favoyang/cd2cf2ed9df7e2538f3630610c604c51 to your computer and use it in GitHub Desktop.
Save favoyang/cd2cf2ed9df7e2538f3630610c604c51 to your computer and use it in GitHub Desktop.
Build addressable bundles when clicking the build button
/// <summary>
/// The script gives you choice to whether to build addressable bundles when clicking the build button.
/// For custom build script, call PreExport method yourself.
/// For cloud build, put BuildAddressablesProcessor.PreExport as PreExport command.
/// Discussion: https://forum.unity.com/threads/how-to-trigger-build-player-content-when-build-unity-project.689602/
///
/// License: The MIT License https://opensource.org/licenses/MIT
/// </summary>
using UnityEditor;
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
using System.Collections;
class BuildAddressablesProcessor
{
/// <summary>
/// Run a clean build before export.
/// </summary>
static public void PreExport()
{
Debug.Log("BuildAddressablesProcessor.PreExport start");
AddressableAssetSettings.CleanPlayerContent(
AddressableAssetSettingsDefaultObject.Settings.ActivePlayerDataBuilder);
AddressableAssetSettings.BuildPlayerContent();
Debug.Log("BuildAddressablesProcessor.PreExport done");
}
[InitializeOnLoadMethod]
private static void Initialize()
{
BuildPlayerWindow.RegisterBuildPlayerHandler(BuildPlayerHandler);
}
private static void BuildPlayerHandler(BuildPlayerOptions options)
{
if (EditorUtility.DisplayDialog("Build with Addressables",
"Do you want to build a clean addressables before export?",
"Build with Addressables", "Skip"))
{
PreExport();
}
BuildPlayerWindow.DefaultBuildMethods.BuildPlayer(options);
}
}
@favoyang
Copy link
Author

favoyang commented Sep 5, 2019

Unity officially supports build addressables in cloud build except for WebGL target. However the script can be still useful to trigger build addressables locally with app build (GUI only).

@jdpigeon
Copy link

Just a note to anyone who might be trying to use this script: It has to be inside a folder called Editor, something that was not immediately obvious to me.

@ppicolott
Copy link

Just a note to anyone who might be trying to use this script: It has to be inside a folder called Editor, something that was not immediately obvious to me.

Thank you very much!

@seyoung-hyun
Copy link

Thanks your code :)
Can I use your code in my commercial app?
Please let me know how I can use the code for commercial distribution.

@favoyang
Copy link
Author

Can I use your code in my commercial app?

My pleasure. Just added a note for the MIT license.

@xuyennguyen
Copy link

xuyennguyen commented Jun 26, 2022

@favoyang when calling PreExport function it will build both local and remote groups, right?

@favoyang
Copy link
Author

@favoyang when calling PreExport function it will build both local and remote groups, right?

@xuyennguyen it builds your currently active profile.

https://docs.unity3d.com/Packages/com.unity.addressables@1.20/manual/BuildPlayerContent.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment