在运行时使用 Build Automation 的构建清单
Access build manifest data at runtime for analytics and bug reporting in Unity Build Automation.
阅读时间3 分钟最后更新于 19 天前
让游戏的运行时代码了解构建本身的关键信息通常很有用。构建名称和构建编号等信息在报告错误或跟踪分析数据时非常有用。为了便于实现这一点,Build Automation 会在构建时向游戏中注入一个清单,以便稍后在运行时可以访问这些关键数据。 Build Automation 以 JSON 格式的
TextAssetResources.Load()值 | 属性 |
|---|---|
| 已构建的提交或变更列表。 |
| 已构建的分支名称。 |
| 与此构建对应的 Build Automation 构建编号。 |
| 构建过程开始时的 UTC 时间戳。 |
| Unity 项目标识符。 |
| 在 Build Automation 中配置的 |
| Build Automation 用于创建构建的 Unity 版本。 |
| 用于构建项目的 XCode 版本(仅限 iOS)。 |
| 已构建的构建目标的名称。 |
Assets/UnityCloud/Resources用于本地测试
要在本地测试构建清单功能,请将文件命名为UnityCloudBuildManifest.json.txt使用清单
您可以在运行时通过以下方式访问清单:以 JSON 格式访问构建清单
您可以在运行时以 JSON 格式访问 Build Automation 清单。此资源需要自定义解析逻辑,或使用第三方 JSON 解析器。 以下 C# 代码示例演示了如何使用 GitHub Gist 上的 MiniJSON 解析器来加载和解析构建清单:using UnityEngine;using System.Collections.Generic;using MiniJSON;public class MyGameObject: MonoBehaviour{ void Start() { var manifest = (TextAsset) Resources.Load("UnityCloudBuildManifest.json"); if (manifest != null) { var manifestDict = Json.Deserialize(manifest.text) as Dictionary<string,object>; foreach (var kvp in manifestDict) { // Be sure to check for null values! var value = (kvp.Value != null) ? kvp.Value.ToString() : ""; Debug.Log(string.Format("Key: {0}, Value: {1}", kvp.Key, value)); } } }}
以 ScriptableObject 形式访问构建清单
BuildManifestObjectScriptableObjectUnityCloudBuildManifest.jsonUnityCloudBuildManifest.jsonBuildManifestObjectbuildNumberPlayerSettingsbundleVersion以下是using UnityEngine;using UnityEditor;using System;public class CloudBuildHelper : MonoBehaviour{ #if UNITY_CLOUD_BUILD public static void PreExport(UnityEngine.CloudBuild.BuildManifestObject manifest) { PlayerSettings.bundleVersion = string.Format("1.0.{0}", manifest.GetValue<int>("buildNumber")); } #endif}
BuildManifestObjectnamespace UnityEngine.CloudBuild{ public class BuildManifestObject : ScriptableObject { // Try to get a manifest value - returns true if key was found and could be cast to type T, otherwise returns false. public bool TryGetValue<T>(string key, out T result); // Retrieve a manifest value or throw an exception if the given key isn't found. public T GetValue<T>(string key); // Set the value for a given key. public void SetValue(string key, object value); // Copy values from a dictionary. ToString() will be called on dictionary values before being stored. public void SetValues(Dictionary<string, object> sourceDict); // Remove all key/value pairs. public void ClearValues(); // Return a dictionary that represents the current BuildManifestObject. public Dictionary<string, object> ToDictionary(); // Return a JSON formatted string that represents the current BuildManifestObject public string ToJson(); // Return an INI formatted string that represents the current BuildManifestObject public override string ToString(); }}