Unity 6.3
0 онлайн 54 гостей 3 в системе
Вход

Создание настраиваемых масштаберов

Создайте настраиваемые масштаберы для автоматической настройки параметров качества на основе производительности устройства.

Пользовательские масштаберы позволяют расширить систему адаптивной производительности собственной логикой для управления параметрами качества. Дополнительные сведения о масштаберах см. в разделе Изменение качества ассета с помощью масштаберов.

Существует два способа создания настраиваемых масштаберов:

Выбранный метод определяет способ настройки масштабера и его применения во время выполнения.

Важно: Эти два рабочих процесса взаимно исключают друг друга. Если вы добавили собственный масштабировщик через интерфейс редактора, Unity отключает автоматический поиск масштабировщиков, объявленных только в скриптах. Выберите для проекта один способ.

Добавление пользовательского масштабировщика через интерфейс редактора

Создать ScriptableObject ассет из вашего скрипт Scaler для настройки свойств Scaler непосредственно в Редакторе для каждого профиль скалера.

Чтобы добавить настраиваемый масштабируемый объект в Редакторе, необходимо создать скрипт настраиваемого масштабируемых объектов и добавить ассет масштабируемых объектов в профиль масштабируемых объектов.

Создание настраиваемого скрипта масштабирования

Чтобы создать скрипт:

  1. Создайте новый скрипт C#, который наследует от AdaptivePerformanceScaler.
  2. Добавить CreateAssetMenu атрибут к классу. Так скрипт становится доступен в Ассеты > Создать меню.
  3. Определите поведение масштабера с помощью методов переопределения, таких как OnLevel, OnEnabledи OnDisabled.

Добавление ассета масштабирования в профиль масштабирования

Чтобы добавить и настроить ресурс:

  1. В Редакторе, из главного меню, перейдите в Ассеты > Создать и выберите пункт меню, который вы определили в атрибуте CreateAssetMenu. Это создаст новый файл scaler asset в вашем окне Project.
  2. Перейдите в Изменить > Project Настройки > Адаптивная производительность.
  3. Выберите профиль масштабирования.
  4. Добавить ресурс в список настраиваемых масштабировщиков.
  5. Настройка параметров масштабирования непосредственно в редакторе. Примечание: настройки, заданные в скрипте, переопределяют настройки, сконфигурированные в редакторе. Поэтому рекомендуется задавать поведение масштабировщика в скрипте, а все настройки — в редакторе.

После выполнения этих действий в окне Project появится ассет Scaler, который можно добавить в любой профиль Scaler и настроить независимо.

После добавления ассета следует обратить внимание на следующее поведение:

  • Адаптивная производительность создает клон ассета масштабирования и управляет им внутри профиля. Если вы измените исходный файл ассета в окне Project, для того чтобы изменения вступили в силу, необходимо удалить старый масштабируемый ассет из профиля и снова добавить обновленный ассет.
  • Имя масштабера в списке заимствовано из имени файла ассета. Нельзя добавить несколько масштаберов с одинаковым именем в один профиль.

Пример: масштабер на основе UI

Этот пример показывает скрипт для рабочего процесса через интерфейс редактора. Все настройки задаются в редакторе.

using UnityEngine;
using UnityEngine.AdaptivePerformance;

// This attribute allows you to create an asset from this script
// via Assets > Create > Scriptable Objects > Texture Quality Scaler UI.
[CreateAssetMenu(fileName = "TextureQualityScaler_UI", menuName = "Scriptable Objects/Texture Quality Scaler UI")]
public class TextureQualityScalerUI : AdaptivePerformanceScaler
{
    private int m_DefaultTextureLimit;

    protected override void OnEnabled()
    {
        // Store the original texture quality setting when the scaler is enabled.
        m_DefaultTextureLimit = QualitySettings.globalTextureMipmapLimit;
    }

    protected override void OnDisabled()
    {
        // Restore the original setting when the scaler is disabled.
        m_DefaultTextureLimit = QualitySettings.globalTextureMipmapLimit;
    }

    // This method is called when the performance level changes.
    protected override void OnLevel()
    {
        // The base class calculates the new `Scale` value based on the current performance level.
        // Apply the new scale to the global mipmap limit.
        // A higher scale (better quality) maps to a lower mipmap limit (better quality).
        if (ScaleChanged())
        {
            // Adjust the global texture mipmap limit based on the new scale.
            Debug.Log($"TextureQualityScalerUI new scale: {Scale}");
            QualitySettings.globalTextureMipmapLimit = (int)MaxBound - ((int)(MaxBound * Scale));
        }
    }
}

Создание масштабера только с помощью скрипта

В этом рабочем процессе вы определяете настройки масштабера непосредственно в скрипте. Во время выполнения Unity сканирует ваш проект на наличие скриптов, наследующих от AdaptivePerformanceScaler, и добавляет их автоматически. Настройки, определенные в скрипте, применяются глобально ко всем профилям масштабера.

Чтобы создать настраиваемый масштабер только для скриптов:

  1. Создайте новый скрипт C#, который наследует от AdaptivePerformanceScaler.
  2. Убедитесь, что имя класса совпадает с AdaptivePerformanceScalerSettingsBase имя.
  3. Определить поведение масштабера.

Выполнив эти шаги, вы получите в проекте скрипт собственного масштабировщика. При входе в режим Play система Adaptive Performance автоматически обнаружит и применит его — при условии, что вы не добавляли масштабировщиков через интерфейс редактора.

Пример: Скаллирующий инструмент только для скриптов

Этот пример включает все параметры, определенные в сценарии.

using UnityEngine;
using UnityEngine.AdaptivePerformance;

public class TextureQualityScalerScriptOnly : AdaptivePerformanceScaler
{
    // Define the default settings for the scaler.
    private AdaptivePerformanceScalerSettingsBase m_AdaptiveTextureQualityScaler = new AdaptivePerformanceScalerSettingsBase
    {
        // This name must exactly match the class name.
        name = "TextureQualityScalerScriptOnly",
        enabled = false,
        scale = 1.0f,
        visualImpact = ScalerVisualImpact.High,
        target = ScalerTarget.GPU,
        minBound = 0,
        maxBound = 4,
        maxLevel = 4
    };

    private int m_DefaultTextureLimit;

    protected override void Awake()
    {
        base.Awake();
        // Apply the default settings defined above.
        ApplyDefaultSetting(m_AdaptiveTextureQualityScaler);
    }

    protected override void OnEnabled()
    {
        m_DefaultTextureLimit = QualitySettings.globalTextureMipmapLimit;
    }

    protected override void OnDisabled()
    {
        QualitySettings.globalTextureMipmapLimit = m_DefaultTextureLimit;
    }

    protected override void OnLevel()
    {
        if (ScaleChanged())
        {
            Debug.Log($"TextureQualityScalerScriptOnly new scale: {Scale}");
            QualitySettings.globalTextureMipmapLimit = (int)MaxBound - ((int)(MaxBound * Scale));
        }
    }
}

Дополнительные ресурсы