Unity3D:通过脚本更改天空盒颜色?

时间:2012-09-23 10:58:50

标签: c# colors unity3d

我正在制作引擎Unity中的游戏,我正在尝试根据一天中的时间使天空盒改变颜色,但我似乎无法找到如何让它工作..我想要的是什么我认为,我想改变渲染设置中用于天空盒的材质的颜色,并能够使用一个变量为红色,一个为绿色,一个为蓝色。

我正在使用C#。

提前感谢所有答案:)

4 个答案:

答案 0 :(得分:5)

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

RenderSettings.skybox.SetColor(“_ Tint”,0,0,蓝色)

我认为你的意思是

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

不需要额外的零,并记住颜色“blue”是Color class的成员变量。

接下来,您必须开发一个时间系统,并根据传递给控制天空盒渲染器的脚本的时间变量,然后使用Lerp函数平滑地从一种颜色过渡到下一种颜色...就像{{3 }}

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 ......

希望这会有所帮助......

答案 1 :(得分:0)

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

如果您想通过点击按钮在运行时加载多个天空盒材料 我有那个代码,我希望它能帮助你构建一个你希望在一段时间内改变天空盒或使用其他输入法的项目。

在这里输入代码

public class skybox: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;
    }
    }
} 

答案 2 :(得分:0)

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

RenderSettings.skybox.SetFloat ("_Exposure", Mathf.Sin (Time.time * Mathf.Deg2Rad * 100) + 2);

答案 3 :(得分:0)

我们可以使用_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);