【问题标题】:Setting up a UI slider to control post processing effects?设置 UI 滑块来控制后期处理效果?
【发布时间】:2018-07-05 17:01:33
【问题描述】:

正如标题所说,我正在尝试设置一个 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);
    }
}

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

  • 2:07 对于滑块的功能,教程设置了一个与他们指定的自定义方法(SetVolume)相匹配的动态浮动。当我尝试使用自定义方法 (SetBrightness) 设置我自己的函数时,我找不到它。我也不确定是否需要为此步骤设置不同的对象而不是画布。
  • 3:47 在本教程中,他们公开了一个音量参数,以便可以通过脚本对其进行操作,但我不知道后处理的等效参数是什么。

为了记录,我能够按照本教程创建我自己的音频滑块,并且没有任何问题。

最后一件事:我打开了后处理配置文件的脚本,找到了我认为需要或至少有点相关的变量类型: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-interface unity3d slider post-processing


【解决方案1】:

您似乎掌握了更改设置所需了解的核心内容。这很好。

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

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

【讨论】:

  • 感谢您的支持,Nol!我不得不对您的代码进行一些修改(弗兰肯斯坦再次出击!),但我仍然遇到了问题。在将 PostProcessVolume 声明为公共变量后,检查器不会接受我试图放入槽的配置文件。为了彻底起见,我什至将滑块声明为公共变量,但检查员也不会接受。结果,当我在游戏中拖动滑块时,调试中没有打印任何内容。
  • @k_holla 滑块对象是什么类型?
  • 公共滑块滑块;
  • @Draco18s 我在想我会尝试在检查器中公开变量,以便彻底设置滑块功能(我忘记了我需要在检查器中的值已更改字段:P)。也许我不再需要担心将滑块公开为公共变量了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多