c# - 设置 UI 滑块来控制后期处理效果?
问题描述
正如标题所说,我正在尝试设置一个 UI 滑块,以便玩家可以在游戏运行时调整一些后期处理设置(特别是曝光和温度)。
为了让您快速了解:
- 我正在使用后处理堆栈的版本一,如下所示: 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,但老实说,我不知道如何处理这些信息。
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
}
}
解决方案
似乎您已经掌握了更改设置所需了解的核心内容。那挺好的。
您需要进行一些简单的更改:
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;
}
}
推荐阅读
- c# - 您可以在 IIS 上的子文件夹中托管 Blazor 应用程序吗?
- c - 如何在汇编中访问 C 结构值?
- visual-studio-code - 重命名/移动引用文件时,Visual Studio 代码中 vue 组件内的“import”语句不会更新
- swift - iOS CryptoKit AES-GCM 是否可以使用少于 12 个字节的随机数?
- unit-testing - 如何使用 Mockito 验证流回调
- c# - App.config 替代更新设置而不退出应用程序
- x86 - 我是操作系统新手,IDT 的大小是多少?
- javascript - 当特定对象属性发生变化时,Javascript 中是否有一种简单的方法来运行函数?
- python - 按布尔值过滤 Pandas 系列
- python-3.x - 为什么我无法在 python 文件中暂停、恢复或退出音乐?