Unity场景打AssetBundle包,加载后天空盒材质丢-创新互联-成都快上网建站

Unity场景打AssetBundle包,加载后天空盒材质丢-创新互联

环境:win10, Unity2018, vs2015

创新互联建站长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为农安企业提供专业的成都网站设计、成都网站制作,农安网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

最近在研究把场景打成AB包进行加载
但是发现之前设置的天空盒,这样加载场景后就一片粉了

其实就是材质shader丢失导致天空变粉
Unity场景打AssetBundle包,加载后天空盒材质丢
如上图,如果是直接在Unity里运行这个场景当然是没问题的

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

  1. Graphics设定
    Unity菜单:Edit->Prject Settings->Graphics
    Unity场景打AssetBundle包,加载后天空盒材质丢
    注意在Always Included Shaders选项里
    把这个Skybox用的内建shader(Skybox/6 Sided)加入到列表中
  2. 打包时,把你用的天空盒材质球,比如skybox8.mat打包,保险起见,把其六张贴图也打到一个包里,比如打的包叫sky.ab
  3. 比如咱们打包的场景叫 a01.unity,打包是a01.ab
    加载包,加载场景就不赘述了。
    要打包的这个场景中添加一个物体,上面挂脚本,在start里运行几段代码就好了
  4. 代码:
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面板里设置的天空,咱们这里需要上面的代码来赋值
Unity场景打AssetBundle包,加载后天空盒材质丢

这样就可以了

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

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站名称:Unity场景打AssetBundle包,加载后天空盒材质丢-创新互联
当前地址:http://kswjz.com/article/cecois.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流