Unity中如何代码动态修改天空盒-流星与蝴蝶-博客园

Unity中如何代码动态修改天空盒-流星与蝴蝶-博客园

如果你只是想动态改变天空盒:建议查看这篇文章unity 天空盒动态变化,了解如何在Unity - Meteor and Butterfly - 博客园中用代码动态修改天空盒

新建一个shader材质材料,将shader的shader属性改为

在着色器中查找图像的名称

unity破解完美变化_unity 天空盒动态变化_unity序列帧包围盒

unity 天空盒动态变化_unity破解完美变化_unity序列帧包围盒

4.通过上一步发现Cubmap的名字叫_Tex游戏素材下载 免费,写一个脚本,sky_tex[]是一个天空盒图片数组

动态天空盒切换可以通过脚本实现。这种方法对模型材质中的反射天空盒没有影响(效果如下),它的反射只会停留在第一个天空盒中,即使你怎么改变天空盒也不会改变。

假设我们的第一个天空盒是这样的,镜面反射是这样的

unity序列帧包围盒_unity 天空盒动态变化_unity破解完美变化

当我们通过脚本动态改变天空盒的时候,我们会发现只有背景发生了变化,镜头的反射效果依然会停留在第一个天空盒中。

unity序列帧包围盒_unity 天空盒动态变化_unity破解完美变化

一般如何修改天空盒

unity序列帧包围盒_unity 天空盒动态变化_unity破解完美变化

这里修改后,我要点击下面生成的光照。我搜索了一下,似乎没有找到动态点击这个按钮的方法。

随着天空盒的变换,对应模型的反射也随之改变方法一

新建一个反射检测器,然后将模型放在这个发射检测器中,反射效果也会达到。

unity破解完美变化_unity序列帧包围盒_unity 天空盒动态变化

调整参数,

unity序列帧包围盒_unity破解完美变化_unity 天空盒动态变化

unity破解完美变化_unity序列帧包围盒_unity 天空盒动态变化

这样设置上面的脚本后unity 天空盒动态变化,就可以实时改变镜头的反射效果了(这个方法可能比较耗时,推荐更好的方法)。

unity序列帧包围盒_unity 天空盒动态变化_unity破解完美变化

unity破解完美变化_unity 天空盒动态变化_unity序列帧包围盒

方法二

unity序列帧包围盒_unity 天空盒动态变化_unity破解完美变化

这样,我们只需要修改里面的cubemap,在新脚本中加入如下代码

//天空盒文件夹的名字
private string sky_texture = "sky_texture";
//找到名为:ReflectionProbe 的游戏对象
GameObject fs = GameObject.Find("ReflectionProbe");
//获取对应的组件(可以获取"ReflectionProbe"对象里面的任何组件,只需要修改<>中的名字)
refProbe = fs.GetComponent();
//指定自定义反射纹理
refProbe.customBakedTexture = Resources.Load(sky_texture + "/Sky" + sky_i) as Texture;