我正在使用Unity引擎开发游戏,试图根据时间更改天空盒的颜色,但似乎无法找到如何使其工作的方法。我想要做的是,在渲染设置中更改我用于天空盒的材料的颜色,并能够使用一个变量来设置红色、绿色和蓝色各自的值。我正在使用C#编程语言。感谢您提前提供所有答案 :)
从您在评论中显示的代码:
RenderSettings.skybox.SetColor("_Tint", 0, 0, 蓝色)
我认为您的意思是
RenderSettings.skybox.SetColor("_Tint", Color.blue)
不需要额外的零,并且请记住,颜色“blue”是Color类的成员变量。
接下来,您需要开发一个时间系统,并基于传递给控制天空盒渲染器脚本的时间变量,使用Lerp函数平滑地从一种颜色过渡到另一种颜色...就像这样
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
public Color colorStart = Color.blue;
public Color colorEnd = Color.green;
public float duration = 1.0F;
void Update() {
float lerp = Mathf.PingPong(Time.time, duration) / duration;
RenderSettings.skybox.SetColor("_Tint", Color.Lerp(colorStart, colorEnd, lerp));
}
}
if (RenderSettings.skybox.HasProperty("_Tint"))
RenderSettings.skybox.SetColor("_Tint", Color.red);
else if (RenderSettings.skybox.HasProperty("_SkyTint"))
RenderSettings.skybox.SetColor("_SkyTint", Color.red);
public class skybox : MonoBehaviour {
public Material[] secondSkybox;
public static int i = 0;
public void skyboxOn()
{
if (i == 0) {
RenderSettings.skybox = secondSkybox[0];
i++;
}
else if(i==1)
{
RenderSettings.skybox = secondSkybox[1];
i++;
}
else if(i==2)
{
RenderSettings.skybox = secondSkybox[2];
i=0;
}
}
}
如果你想改变天空盒的颜色,可以使用这行代码
RenderSettings.skybox.SetFloat ("_Exposure", Mathf.Sin (Time.time * Mathf.Deg2Rad * 100) + 2);
SetColor' takes
4' arguments” - mort