webgl天空盒边界缝隙_Unity场景打AssetBundle包,加载后天空盒材质丢失问题及解决...

在Unity2018中,将场景打包为AssetBundle时,可能会遇到天空盒材质丢失,显示为粉色的问题。解决方法包括在Graphics设置中确保Skybox/6 Sided shader包含在内,打包天空盒材质及其贴图,并在加载场景时通过代码动态加载材质并设置RenderSettings.skybox。具体代码实现涉及到WWW类和AssetBundle的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:win10, Unity2018, vs2015

最近在研究把场景打成AB包进行加载

但是发现之前设置的天空盒,这样加载场景后就一片粉了

其实就是材质shader丢失导致天空变粉

如上图,如果是直接在Unity里运行这个场景当然是没问题的

那么要解决这个问题,需要几个步骤,还要借助代码(注:这只是我个人的解决办法)

Graphics设定

Unity菜单:Edit->Prject Settings->Graphics

注意在Always Included Shaders选项里

把这个Skybox用的内建shader(Skybox/6 Sided)加入到列表中

打包时,把你用的天空盒材质球,比如skybox8.mat打包,保险起见,把其六张贴图也打到一个包里,比如打的包叫sky.ab

比如咱们打包的场景叫 a01.unity,打包是a01.ab

加载包,加载场景就不赘述了。

要打包的这个场景中添加一个物体,上面挂脚本,在start里运行几段代码就好了

代码:

void Start()

{

StartCoroutine(loadSky());

}

IEnumerator loadSky()

{

using(WWW www=new WWW(url)//这里的url就是你的包放置的地址

//比如:http://127.0.0.1/AB/sky.ab (sky.ab在前面提到,是天空盒材质的包)

{

yield return www;

if(www.error==null)

{

var a=www.assetBundle;

Material m = a.LoadAsset("skybox8.mat") as Material;//skybox8.mat前述提到

//虽然材质打包了,但是也没有shader,所以需要下面这行

m.shader=Shader.Find("Skybox/6 Sided");

//因为咱们在前面步骤中在Graphics设定里把这个shader加入了,所以能Find到

RenderSettings.skybox=m;//把加好shader的材质赋给场景

}

}

}

如上,这样才能把天空材质加载上

RenderSettings.skybox

这个是在场景lighting面板里设置的天空,咱们这里需要上面的代码来赋值

这样就可以了

注:加载打成ab包的场景,场景里的模型材质shader是不会丢的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值