Unity場景打AssetBundle包,加載後天空盒材質丟失問題及解決

環境:win10, Unity2018, vs2015ide

最近在研究把場景打成AB包進行加載
可是發現以前設置的天空盒,這樣加載場景後就一片粉了url

其實就是材質shader丟失致使天空變粉
Unity場景打AssetBundle包,加載後天空盒材質丟失問題及解決
如上圖,若是是直接在Unity裏運行這個場景固然是沒問題的code

那麼要解決這個問題,須要幾個步驟,還要藉助代碼(注:這只是我我的的解決辦法)it

  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的材質賦給場景
        }
    }
}

如上,這樣才能把天空材質加載上class

RenderSettings.skybox

這個是在場景lighting面板裏設置的天空,我們這裏須要上面的代碼來賦值
Unity場景打AssetBundle包,加載後天空盒材質丟失問題及解決打包

這樣就能夠了yield

注:加載打成ab包的場景,場景裏的模型材質shader是不會丟的im

相關文章
相關標籤/搜索