【问题标题】:Unity3D: Change skybox color via script?Unity3D:通过脚本更改天空盒颜色?
【发布时间】:2012-09-15 03:07:05
【问题描述】:

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

我正在使用 C#。

提前感谢所有答案:)

【问题讨论】:

  • 什么意思?我要求解释如何做到这一点,而不是我自己的代码有什么问题..
  • answers.unity3d.com/questions/130529/… 显然它使用_Tint 而不是_Color
  • 我试过这个:RenderSettings.skybox.SetColor("_Tint", 0, 0, blue);但我刚刚收到错误“错误 CS1501:方法 SetColor' takes 4' 参数没有重载”

标签: c# colors unity3d


【解决方案1】:

根据您在评论中显示的代码:

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

我想你是说

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

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

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

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

希望这会有所帮助...

【讨论】:

    【解决方案2】:

    我们可以使用_Tint 属性更改天空盒颜色。 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);
    

    【讨论】:

      【解决方案3】:

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

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

      在此处输入代码

      公共类天空盒: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;
          }
          }
      } 
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-03
          • 1970-01-01
          • 1970-01-01
          • 2023-02-07
          相关资源
          最近更新 更多