3

我正在Unity引擎中开发游戏,并试图根据一天中的时间使天空盒改变颜色,但我似乎无法找到如何让它工作..我想做的事,我想一想,就是在渲染设置中更改我用于天空盒的材质的颜色,并且能够使用一个红色变量、一个绿色变量和一个蓝色变量来设置它。

我正在使用 C#。

提前感谢所有答案:)

4

4 回答 4

8

从您在评论中显示的代码中:

RenderSettings.skybox.SetColor("_Tint", 0, 0, blue)

我想你的意思是

RenderSettings.skybox.SetColor("_Tint", Color.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));
    }
}

然后你可以写一个函数来改变 colorStart 和 colorEnd ...

希望这可以帮助...

于 2012-09-24T17:30:46.613 回答
2

我们可以使用该_Tint属性更改 Skybox 颜色。RenderSettings是用于在运行时更改渲染属性的基类。为了确保属性存在于天空盒中,由HasProperty(). SetColor()用于设置天空盒的颜色。

     if (RenderSettings.skybox.HasProperty("_Tint"))
         RenderSettings.skybox.SetColor("_Tint", Color.red);
     else if (RenderSettings.skybox.HasProperty("_SkyTint"))
         RenderSettings.skybox.SetColor("_SkyTint", Color.red);
于 2020-11-24T10:48:27.107 回答
1

您也可以通过将纹理形状更改为立方体来统一制作自己的天空盒,然后应用这些更改,它将创建一个立方体网格,您只需将其放入统一编辑器屏幕中即可。

如果您想通过单击按钮在运行时加载多个天空盒材料,我有该代码,我希望它可以帮助您构建一个您想要在某个时间或使用其他输入法更改天空盒的项目。

在此处输入代码

公共类天空盒:MonoBehaviour {

enter code here
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;
    }
    }
} 
于 2017-08-17T11:03:11.607 回答
0

如果你也想改变天空盒的颜色,可以使用这行代码来完成

RenderSettings.skybox.SetFloat ("_Exposure", Mathf.Sin (Time.time * Mathf.Deg2Rad * 100) + 2);
于 2017-08-17T11:07:52.433 回答