保姆式教学-实现天空盒旋转
目录
一、天空盒材质设置
1)在菜单栏window->Rendering->lighting
2)设置天空盒子材质,替换默认材质
3)认识Rotation变量
二、代码实现让天空盒转起来
在一个小Unity项目中,需要将天空盒旋转,以便云朵能够简单移动效果,项目是URP项目,现做下记录,unity 编辑器是2020.1.0f1版本。早期的版本天空盒可以通过Camera.main的对象获得。
现在URP项目统一使用RenderSettings 设置直接获得
一、天空盒材质设置
1)在菜单栏window->Rendering->lighting
我们看到天空盒子的材质,没错,修改的就是它,当然我是修改好了。下面讲解如何替换天空盒材质。
2)设置天空盒子材质,替换默认材质
创建一个带SkyBox/Panoramic shader的材质,该材质要求天空盒是一张球面的天空图
该材质天空贴图是一张图
如果是六边形贴图,那么创建的材质选择SkyBox/6 sided这个shader
当然如果你制作了一个cubemap图,那么你创建的材质的shader 选择为skybox/Cubmap
3)认识Rotation变量
但是不管我们选择那个我们发现这三个材质都有propery 面板中都有Rotation选项,在编辑的代码中我们到该面板变量是_Rotation变量
操作步骤如下:打开shader面板,看到我们定义的变量
我们通过代码控制就是_Rotation变量,当天空盒材质创建好了,你应该改在lignting面板中去替换它
二、代码实现让天空盒转起来
材质创建完成后,接下就是代码了,对于_Rotation变量因为是浮点数,所以我们需要SetFloat()函数和来修改其值,天空盒的材质信息通过RenderSettings获得,它是全局的。具体代码如下:
public class USkyRotate : MonoBehaviour
{
private float rot = 0;
//旋转速率
public float rate = 0.7f;
public void Start()
{
rot = RenderSettings.skybox.GetFloat("_Rotation");
}
public void Update()
{
if (RenderSettings.skybox == null)
return;
rot += rate * Time.deltaTime;
rot %= 360;
RenderSettings.skybox.SetFloat("_Rotation", rot);
}
}