首页 > 解决方案 > 设置 UI 滑块来控制后期处理效果?

问题描述

正如标题所说,我正在尝试设置一个 UI 滑块,以便玩家可以在游戏运行时调整一些后期处理设置(特别是曝光和温度)。

为了让您快速了解:

我认为我最好的方法是尝试调整我从本教程中学到的关于创建音量滑块的内容: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);
    }
}

我在教程中的特定点遇到的具体问题:

作为记录,我能够按照本教程创建我自己的音频滑块并让它正常工作。

最后一件事:我打开了后处理配置文件的脚本,找到了我认为我需要或至少有点相关的变量类型:ColorGradingModel,但老实说,我不知道如何处理这些信息。

2018 年 7 月 9 日更新



从那以后,我一直在查看@Nol 的代码,并让其他人查看它并帮助我解决它。目前,滑块的功能(不确定这是否是正确的术语,但这是我一直坚持的)是通过检查器中的 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
    }

}

标签: c#user-interfaceunity3dsliderpost-processing

解决方案


似乎您已经掌握了更改设置所需了解的核心内容。那挺好的。

您需要进行一些简单的更改:

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;
    }
}

推荐阅读