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

3
我正在使用Unity引擎开发游戏,试图根据时间更改天空盒的颜色,但似乎无法找到如何使其工作的方法。我想要做的是,在渲染设置中更改我用于天空盒的材料的颜色,并能够使用一个变量来设置红色、绿色和蓝色各自的值。我正在使用C#编程语言。感谢您提前提供所有答案 :)

1
你的意思是什么?我是在请求如何实现它的解释,而不是我的代码有什么问题。 - mort
请参见http://answers.unity3d.com/questions/130529/change-tint-color-of-main-skybox-material-in-scrip.html。显然,它使用“_Tint”而不是“_Color”。 - ChrisF
我尝试了这个: RenderSettings.skybox.SetColor("_Tint", 0, 0, blue); 但是我得到了错误信息: “error CS1501: No overload for method SetColor' takes 4' arguments” - mort
4个回答

8

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

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));
    }
}

那么您可以编写一个函数来更改colorStart和colorEnd的颜色...希望这有所帮助...

3
我们可以使用“_Tint”属性更改Skybox的颜色。 “RenderSettings”是用于在运行时更改渲染属性的基类。通过使用“HasProperty()”来确保该属性存在于Skybox中。使用“SetColor()”来设置Skybox的颜色。
     if (RenderSettings.skybox.HasProperty("_Tint"))
         RenderSettings.skybox.SetColor("_Tint", Color.red);
     else if (RenderSettings.skybox.HasProperty("_SkyTint"))
         RenderSettings.skybox.SetColor("_SkyTint", Color.red);

1
你也可以在Unity中制作自己的天空盒,只需将纹理形状更改为立方体,并应用这些更改,它将创建一个立方体网格,你可以直接拖放到Unity编辑器屏幕中。
如果你想通过点击按钮在运行时加载多个天空盒材质:
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;
        }
    }
} 

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接