1,Unity自带的SkyBox Shader
(1)创建一个材质
(2)点击创建好的材质在inspector面板查看Unity自带的Shader
(3)点击Skybox可以看到4种shader
2,在unity store商场添加免费的资源来练习使用这几种shader
我选择的是图中圈中的
(1)更改shader为第一种shader,6 sided(6边的意思,天空可以说就是6张图片组成,上下左右前后),将资源中的图片一对一导入,例如up就放到Up的图片槽中即可。
随后将创建好的materal拖到scene场景中即可,我这边改名为6side
随后在点击下图的lighting
可以看到默认的材质已改为6Side
(2)练习使用第二种Cubemap
重新创建一个材质,改名为Cubemap,改shader为cubemap
创建好后可以看到cubemap缺少
在资源中找到cubemap需要的资源
点击select选择这个到刚才创建好的cubemap上
之后拖拽到scene中可以看到,天空盒材质已改为我们自己创建的Cubemap
(3)练习使用Panoramics
基本步骤一样,只不过刚才的Texture shape是Cube,这个是2D
但是我们将刚才的这张图的Cube改为2D后看到
这个就是6张图片,而不是一张全景图。同理我们查看资源中带有的Panoramics资源是一张全景图。
而将全景图改为Cube类性。
(4)第四种Procedural(程序化)暂不研究
3,使用简单脚本完成天空盒的更换
using UnityEngine;
public class SkyBox : MonoBehaviour
{
//1,需要一个天空盒的材质数组;
public Material[] skyBox;
//2,需要一个索引值来控制材质数组的循环
private int index = 0;
/*
void InvokeRepeating(string methodName, float time, float repeatRate);
methodName:要调用的方法的名称,作为字符串传递。
time:首次调用 methodName 方法之前的延迟时间(以秒为单位)。
repeatRate:之后每次调用 methodName 方法之间的时间间隔(以秒为单位)
*/
void Start()
{
//3秒后开始调用changeSkyBox方法,每隔3秒调用一次
InvokeRepeating("changeSkyBox", 3f, 3f);
}
private void changeSkyBox()
{
RenderSettings.skybox = skyBox[index];
index++;
index %= skyBox.Length;
}
}