Fix build script for Unity 2018, by using reflection instead of version defines (#238)

This commit is contained in:
Sakari Bergen 2021-04-02 12:11:56 +03:00 committed by GitHub
parent 4d0b6e6db1
commit 8419046c0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 20 deletions

View File

@ -1,15 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using UnityBuilderAction.Input;
using UnityBuilderAction.Reporting;
using UnityBuilderAction.Versioning;
using UnityEditor;
using UnityEditor.Build.Reporting;
#if USE_ADDRESSABLES
using UnityEditor.AddressableAssets.Settings;
#endif
using UnityEngine;
namespace UnityBuilderAction
{
@ -48,11 +45,28 @@ namespace UnityBuilderAction
if (buildPlayerOptions.target == BuildTarget.Android)
AndroidSettings.Apply(options);
// Execute default AddressableAsset content build, if the package is installed
#if USE_ADDRESSABLES
AddressableAssetSettings.CleanPlayerContent();
AddressableAssetSettings.BuildPlayerContent();
#endif
// 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
void CallAddressablesMethod(string methodName, object[] args) => addressableAssetSettingsType
.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public)
.Invoke(null, args);
try
{
CallAddressablesMethod("CleanPlayerContent", new object[] { null });
CallAddressablesMethod("BuildPlayerContent", Array.Empty<object>());
}
catch (Exception e)
{
Debug.LogError($"Failed to run default addressables build:\n{e}");
}
}
// Perform build
BuildReport buildReport = BuildPipeline.BuildPlayer(buildPlayerOptions);

View File

@ -1,8 +1,6 @@
{
"name": "UnityBuilderAction",
"references": [
"Unity.Addressables.Editor"
],
"references": [],
"includePlatforms": [
"Editor"
],
@ -12,12 +10,6 @@
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.unity.addressables",
"expression": "1.0.0",
"define": "USE_ADDRESSABLES"
}
],
"versionDefines": [],
"noEngineReferences": false
}