Настройка ползунка пользовательского интерфейса для управления эффектами пост-обработки? - PullRequest
0 голосов
/ 05 июля 2018

Как видно из названия, я пытаюсь настроить ползунок пользовательского интерфейса, чтобы игрок мог настроить некоторые параметры постобработки (в частности, экспозицию и температуру) во время игры.

Чтобы поднять скорость:

  • Я использую первую версию стека пост-обработки, как показано здесь: https://assetstore.unity.com/packages/essentials/post-processing-stack-83912
  • Я очень новичок в C #; Я нахожусь на стадии "Франкенштейна" в изучении программирования (следуя инструкциям и изменяя то, что работает, пока оно не сломается или не выполнит то, что я пытаюсь выполнить).

Я считаю, что мой лучший способ - попытаться адаптировать то, чему я научился из этого урока, при создании слайдера громкости звука: https://www.youtube.com/watch?v=YOaYQrN1oYQ&t=122s

Это код, который я до сих пор собирал вместе:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BrightnessSlider : MonoBehaviour {

    public void SetBrightness (float brightness)
    {
        Debug.Log(brightness);
    }
}

Конкретные проблемы, с которыми я сталкиваюсь в определенных частях учебника:

  • 2: 07 Для функции ползунка в учебном пособии устанавливается динамическое плавание, соответствующее заданному ими пользовательскому методу (SetVolume). Когда я пытаюсь настроить свою собственную функцию с помощью пользовательского метода (SetBrightness), я не могу ее найти. Я также не уверен, нужно ли мне устанавливать другой объект вместо холста для этого шага.
  • 3: 47 В учебном пособии они выставляют параметр для тома, чтобы им можно было манипулировать с помощью сценария, но я не знаю, какой эквивалент будет для постобработки.

Кстати, я смог следовать этому уроку, чтобы создать свой собственный аудио слайдер, и он работал без проблем.

И последнее: я открыл скрипт для профиля постобработки и нашел тип переменной, который мне нужен или, по крайней мере, был бы уместен: ColorGradingModel, но я, честно говоря, понятия не имею, что делать с этой информацией .

Обновление от 09 июля 2018 года

С тех пор я просматривал код @ Нола, и кто-то другой посмотрел на него и помог мне с этим. В настоящий момент функциональность ползунка (не уверен, что это правильная терминология, но я придерживаюсь этого) настраивается через поле «On Value Changed» в инспекторе, но на самом деле он не управляет / не изменяет значения яркости. У меня был кто-то еще (кто гораздо более квалифицирован, чем я), чтобы посмотреть на это со мной. Кажется, что это должно работать так, как они его настроили, но что-то теряется при переводе между методом и ползунком.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.PostProcessing;
using UnityEngine.UI;

public class BrightnessSlider : MonoBehaviour   
    {
    public Slider slider;
    public PostProcessingProfile Default;
    private ColorGradingModel cgm;

    private void Start()
    {
        //I haven't been able to get this to not return some sort of error, 
        //and I'm not even sure of its usefulness. 
        //I've been keeping it commented out for the most part.
        Default.profile.TryGetSettings(out cgm);
    }

    public void SetBrightness(float brightness)
    {
        ColorGradingModel.Settings settings = cgm.settings;
        settings.basic.postExposure = brightness;
        cgm.settings = settings;
        Debug.Log("Brightness is: " + brightness);  //For testing purposes
    }

}

1 Ответ

0 голосов
/ 05 июля 2018

Похоже, у вас есть ядро ​​того, что вам нужно знать для изменения настроек. Это хорошо.

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing; //How you'll access PPV (Post Processing Volume) models and settings

public class BrightnessSlider : MonoBehaviour {

    PostProcessingVolume ppv; //You can make this public to set in inspector
    ColorGradingModel cgm; //can use ppv.profile.TryGetSettings(out cgm) in Start()

    public void SetBrightness (float brightness)
    {
        cg.[setting you want to change].value = brightness;
    }
}
...