Создание пользовательского поставщика
Создание и настройка настраиваемого поставщика для адаптивной производительности.
Адаптивная производительность опирается на поставщиков действовать в качестве связующего звена Unity Создание настраиваемого поставщика предполагает создание самостоятельного пакета, который может быть обнаружен системой адаптивной производительности.
Чтобы создать новый поставщик, выполните следующие действия.
- Создать погрузчик.
- Настройка параметров сборки и времени выполнения.
- Предоставьте метаданные пакета, чтобы Unity мог распознать вашего поставщика.
Создание загрузчика
AdaptivePerformanceManagerSettings класс управляет жизненным циклом подсистем вашего поставщика. Поставщику нужен загрузчик, который выступает основным механизмом этих возможностей.
Чтобы создать загрузчик:
Создать подкласс
AdaptivePerformanceLoader. Этот класс —ScriptableObjectчтобы управлять подсистемами безопасным для типов образом, выведите из данного примера подсистемы, которые будут использоваться в вашем приложении.AdaptivePerformanceLoaderHelperclass instead.-
Реализуйте методы жизненного цикла.
AdaptivePerformanceManagerSettingsвызывает эти методы для инициализации, запуска, остановки и деинициализации (очистки) подсистем загрузчика. Например:using UnityEngine; using UnityEngine.AdaptivePerformance; public abstract class AdaptivePerformanceLoader : ScriptableObject { public virtual bool Initialize() { return false; } public virtual bool Start() { return false; } public virtual bool Stop() { return false; } public virtual bool Deinitialize() { return false; } public abstract T GetLoadedSubsystem<T>() where T : class, ISubsystem; public abstract ISubsystem GetDefaultSubsystem(); public abstract IAdaptivePerformanceSettings GetSettings(); } Добавьте загрузчик в настройки менеджера. В Unity Editor добавьте экземпляр
AdaptivePerformanceLoaderв список Loaders в Adaptive Performance Manager Settings. Можно добавить несколько загрузчиков и упорядочить их по приоритету. Во время выполнения менеджер пытается инициализировать каждый загрузчик в порядке. Первый загрузчик, успешно инициализированный, становится активным загрузчиком.(Optional) Query the static
AdaptivePerformanceManagerSettings.ActiveLoaderЕсли все загрузчики не инициализируются, Unity устанавливаетactiveLoaderк нулю.
Настройка параметров сборки и времени выполнения
Поставщику могут потребоваться дополнительные параметры для управления проблемами сборки или конфигурацией времени выполнения.
Чтобы настроить параметры сборки и времени выполнения с помощью Project Settings:
Добавить атрибут
AdaptivePerformanceConfigurationDataкScriptableObject.Определение свойств в
ScriptableObjectдля управления конфигурацией поставщика. Unity отображает эти параметры в Адаптивная производительность раздела бюджета Project Настройки окно.
Примечание: Unity управляет жизненным циклом одного экземпляра класса, помеченного этим атрибутом, черезEditorBuildSettingsAPI объекта конфигурации. Если вы не предоставите отдельный интерфейс, настройки конфигурации отобразятся в Project Настройки окно с использованием стандарта Скриптовый объект Inspector. Вы можете создать пользовательский Редактор для ваших настроек конфигурации типа, чтобы заменить стандартный Inspector в Project Настройки окно.-
Наследовать от
AdaptivePerformanceBuildHelper<T>в сценарии сборки для передачи параметров из Редактора в загрузчик времени выполнения. Ниже приведен пример простого скрипта сборки:using UnityEngine.AdaptivePerformance.Editor; using UnityEngine; public class MySettings : ScriptableObject { } public class MyBuildProcessor : AdaptivePerformanceBuildHelper<MySettings> { public override string BuildSettingsKey { get { return "MyPackageSettingsKey"; } } }
Настройка процесса сборки
Можно также переопределить шаги обработки сборки, например OnPreprocessBuild и OnPostprocessBuild. Обязательно вызовите реализацию базового класса, чтобы ваши настройки попали в собранное приложение. Например:
using UnityEditor.Build.Reporting;
using UnityEngine.AdaptivePerformance.Editor;
using UnityEngine;
public class MySettings : ScriptableObject { }
public class MyBuildProcessor : AdaptivePerformanceBuildHelper<MySettings>
{
public override string BuildSettingsKey { get { return "MyPackageSettingsKey"; } }
public override void OnPreprocessBuild(BuildReport report)
{
base.OnPreprocessBuild(report);
// Do your work here
}
public override void OnPostprocessBuild(BuildReport report)
{
base.OnPreprocessBuild(report);
// Do your work here
}
}
Если вам нужны разные настройки для разных платформ на этапе сборки, вы можете переопределить AdaptivePerformanceBuildHelper<T0>.SettingsForBuildTargetGroup и использовать buildTargetGroup По умолчанию этот метод использует ключ, связанный с экземпляром settings, для копирования всего объекта settings из файла settings. EditorUserBuildSettings до PlayerSettings.
using UnityEditor;
using UnityEngine;
using UnityEngine.AdaptivePerformance.Editor;
public class MySettings : ScriptableObject { }
public class MyBuildProcessor : AdaptivePerformanceBuildHelper<MySettings>
{
public override string BuildSettingsKey { get { return "MyPackageSettingsKey"; } }
public override UnityEngine.Object SettingsForBuildTargetGroup(BuildTargetGroup buildTargetGroup)
{
// Get platform specific settings and return them. Use something like the following
// for simple settings data that isn't platform specific.
UnityEngine.Object settingsObj = null;
EditorBuildSettings.TryGetConfigObject(BuildSettingsKey, out settingsObj);
if (settingsObj == null || !(settingsObj is T))
return null;
return settingsObj;
}
}
Предоставление метаданных пакета
Чтобы система управления поставщиком адаптивной производительности использовала поставщик, необходимо предоставить метаданные.
Для этого создайте класс, реализующий следующие интерфейсы:
Система использует отражение .NET для нахождения всех типов, реализующих IAdaptivePerformancePackage интерфейс. Затем он пытается создать экземпляр каждого из них и заполнить хранилище метаданных сведениями, которые предоставляет каждый экземпляр.
Инициализация пакета
Реализация метаданных пакета позволяет системе управления поставщиком адаптивной производительности автоматически создавать и инициализировать экземпляры загрузчиков и параметров. Система передает любые новые экземпляры параметров методу PopulateNewSettingsInstance, чтобы предоставить поставщику возможность инициализировать данные нового экземпляра после его создания, если это необходимо.
Пример минимальной настройки пакета с метаданными
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.AdaptivePerformance;
using UnityEngine.AdaptivePerformance.Editor.Metadata;
// The following are minimal placeholder classes required for this snippet to compile.
// In your project, 'MyPackageSettings' and 'MyLoader' would contain your actual custom logic and definitions.
public class MyPackageSettings : ScriptableObject { }
public class MyLoader : AdaptivePerformanceLoader
{
public override bool Initialize() { return true; }
public override bool Start() { return true; }
public override bool Stop() { return true; }
public override bool Deinitialize() { return true; }
public override T GetLoadedSubsystem<T>() { return null; }
public override ISubsystem GetDefaultSubsystem() { return null; }
public override IAdaptivePerformanceSettings GetSettings() { return null; }
}
class MyPackage : IAdaptivePerformancePackage
{
private class MyLoaderMetadata : IAdaptivePerformanceLoaderMetadata
{
public string loaderName { get; } = "My Loader";
public string loaderType { get; } = typeof(MyLoader).AssemblyQualifiedName;
public List<BuildTargetGroup> supportedBuildTargets { get; } = new List<BuildTargetGroup>()
{
BuildTargetGroup.Standalone,
BuildTargetGroup.Android,
BuildTargetGroup.iOS
};
}
private class MyPackageMetadata : IAdaptivePerformancePackageMetadata
{
public string packageName { get; } = "My AdaptivePerformance Provider";
public string packageId { get; } = "my.adaptiveperformance.package";
public string settingsType { get; } = typeof(MyPackageSettings).AssemblyQualifiedName;
public List<IAdaptivePerformanceLoaderMetadata> loaderMetadata { get; } = new List<IAdaptivePerformanceLoaderMetadata>()
{
new MyLoaderMetadata()
};
}
private static IAdaptivePerformancePackageMetadata s_Metadata = new MyPackageMetadata();
public IAdaptivePerformancePackageMetadata metadata => s_Metadata;
public bool PopulateNewSettingsInstance(ScriptableObject obj)
{
MyPackageSettings packageSettings = obj as MyPackageSettings;
if (packageSettings != null)
{
return true;
}
return false;
}
}
Настройки поставщика в Unity Editor
Настройки поставщика можно отобразить в разделах Project Настройки и Создание профилей, чтобы изменить настройки в обоих местах. Предоставьте пользовательский код UI, унаследовав его от ProviderSettingsEditor и добавив пользовательский атрибут.
В следующем примере показано, как работают параметры поставщика, если требуется только параметр по умолчанию UI.
Примечание: ShowTargetGroupSelection скрывает вкладку группы выбора платформы, если вы используете функцию по умолчанию DisplayProviderSettings().
using UnityEditor;
using UnityEditor.Localization;
using UnityEngine;
using UnityEngine.AdaptivePerformance.Editor;
public class BasicProviderSettings : ScriptableObject { }
[CustomEditor(typeof(BasicProviderSettings))]
internal class BasicProviderSettingsEditor : ProviderSettingsEditor
{
protected override BuildTargetGroup CurrentTargetGroup => BuildTargetGroup.Unknown;
public override bool ShowTargetGroupSelection => false;
public override string UnsupportedInfo => L10n.Tr("Adaptive Performance Basic provider is not supported on this platform");
protected override bool IsAutoPerformanceModeAvailable => false;
protected override bool IsBoostAvailable => false;
protected override bool IsThermalActionDelayAvailable => false;
public override void OnInspectorGUI()
{
DisplayProviderSettings();
}
}