Files
2026-07-13 12:49:17 +08:00

95 lines
4.2 KiB
C#

using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Build;
namespace MCPForUnity.Editor.Tools.Build
{
public static class BuildSettingsHelper
{
public static object ReadProperty(string property, NamedBuildTarget namedTarget)
{
switch (property.ToLowerInvariant())
{
case "product_name":
return new { property, value = PlayerSettings.productName };
case "company_name":
return new { property, value = PlayerSettings.companyName };
case "version":
return new { property, value = PlayerSettings.bundleVersion };
case "bundle_id":
return new { property, value = PlayerSettings.GetApplicationIdentifier(namedTarget) };
case "scripting_backend":
var backend = PlayerSettings.GetScriptingBackend(namedTarget);
return new { property, value = backend == ScriptingImplementation.IL2CPP ? "il2cpp" : "mono" };
case "defines":
return new { property, value = PlayerSettings.GetScriptingDefineSymbols(namedTarget) };
case "architecture":
var arch = PlayerSettings.GetArchitecture(namedTarget);
string archName = arch switch { 0 => "x86_64", 1 => "arm64", 2 => "universal", _ => "unknown" };
return new { property, value = archName, raw = arch };
default:
return null;
}
}
public static string WriteProperty(string property, string value, NamedBuildTarget namedTarget)
{
try
{
switch (property.ToLowerInvariant())
{
case "product_name":
PlayerSettings.productName = value;
return null;
case "company_name":
PlayerSettings.companyName = value;
return null;
case "version":
PlayerSettings.bundleVersion = value;
return null;
case "bundle_id":
PlayerSettings.SetApplicationIdentifier(namedTarget, value);
return null;
case "scripting_backend":
var backendValue = value.ToLowerInvariant();
if (backendValue != "il2cpp" && backendValue != "mono")
return $"Unknown scripting_backend '{value}'. Valid: mono, il2cpp";
var impl = backendValue == "il2cpp"
? ScriptingImplementation.IL2CPP
: ScriptingImplementation.Mono2x;
PlayerSettings.SetScriptingBackend(namedTarget, impl);
return null;
case "defines":
PlayerSettings.SetScriptingDefineSymbols(namedTarget, value);
return null;
case "architecture":
int arch = value.ToLowerInvariant() switch
{
"x86_64" or "none" or "default" => 0,
"arm64" => 1,
"universal" => 2,
_ => -1
};
if (arch < 0)
return $"Unknown architecture '{value}'. Valid: x86_64, arm64, universal";
PlayerSettings.SetArchitecture(namedTarget, arch);
return null;
default:
return $"Unknown property '{property}'. Valid: product_name, company_name, version, bundle_id, scripting_backend, defines, architecture";
}
}
catch (Exception ex)
{
return $"Failed to set {property}: {ex.Message}";
}
}
public static readonly IReadOnlyList<string> ValidProperties = new[]
{
"product_name", "company_name", "version", "bundle_id",
"scripting_backend", "defines", "architecture"
};
}
}