My Unity应用程序会随着时间的推移(基于音频(为场景的Skybox Material Exposure属性设置动画。我的项目文件中的"材质"资产的"暴露"=1(初始值(。这很管用。
当我在Unity:内玩应用程序时
- 在播放之前,我选择项目中的材质(查看正在发生(
- 在Unity中播放应用程序
- 应用程序一启动,"材质"的"曝光"就会设置为非常低值(如预期(
- Skybox Exposure按预期设置动画(即,Skybox改变为音乐(
- 曝光值(在Inspector中(在开始时(#3(的第一次更改后,在播放过程中(看起来很奇怪(
- 当我退出播放模式时,曝光(在Inspector中(设置为最后一个播放期间的值(运行时不会显示在Inspector中(
===>我希望"材质"在退出后返回到其播放前的值。
重要信息:如果我用Sphere radius(但没有脚本(尝试同样的实验,并且在播放时手动更改球体的半径,当我退出播放模式时,它会重置(如预期(为其原始播放前值。
很明显,我错过了团结的核心。我读了所有我能找到的东西&仍然迷失了方向。(想知道问题是场景的skybox上的默认隐藏标志还是类似的东西。(
更改skybox.material.Export每个帧的场景控制器脚本:
public class AnimateSkyboxFromAudio : BaseAnimateFromAudio {
protected override void Start() {
base.Start ();
}
protected override void MyUpdate () {
float rms = GetAttrByName (AudioAnalyzer.RMS);
RenderSettings.skybox.SetFloat ("_Exposure", rms * 5);
}
}
我希望材料在退出。
RenderSettings.skybox
的工作方式与其他具有材质的GameObjects不同。它返回共享材料引用,这与Renderer.material
在访问其材料属性时返回的唯一材料不同。
因此,在修改之前必须备份该材料。当您单击"停止"时,将备份材料分配回RenderSettings.skybox
。这两者都可以在Start()
和OnDisable()
函数中完成。通过使用material参数调用material类构造函数,可以生成备份材质。(Material newMat = new Material(RenderSettings.skybox)
(。
如果只有在更改_Exposure
属性,那么您甚至不需要进行材料备份。只需使用RenderSettings.skybox.GetFloat("_Exposure");
备份_Exposure
属性,然后在单击停止时重新分配它。
曝光值(在Inspector中(在第一次开始时的变化(#3(,在播放过程中(看起来很奇怪(,
更改材质值后,请调用DynamicGI.UpdateEnvironment();
。
使用UI Slider
:更改Skybox _Exposure
属性的示例
public Slider slider;
Material backUpMaterial;
void Start()
{
slider.minValue = 0f;
slider.maxValue = 3f;
slider.value = 1.3f;
//Get Material Backup
backUpMaterial = makeSkyboxBackUp();
slider.onValueChanged.AddListener(delegate { sliderCallBack(slider.value); });
}
void sliderCallBack(float value)
{
RenderSettings.skybox.SetFloat("_Exposure", value);
DynamicGI.UpdateEnvironment();
}
Material makeSkyboxBackUp()
{
return new Material(RenderSettings.skybox);
}
//Restore skybox material back to the Default values
void OnDisable()
{
RenderSettings.skybox = backUpMaterial;
DynamicGI.UpdateEnvironment();
slider.onValueChanged.RemoveListener(delegate { sliderCallBack(slider.value); });
}
由于您已经修改了skybox
设置的原始副本,我建议您通过将_Exposure
属性设置为默认值1.3
来重置它,然后尝试上面的解决方案。