溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity場景打AssetBundle包,加載后天空盒材質(zhì)丟

發(fā)布時間:2020-02-14 11:10:36 來源:網(wǎng)絡 閱讀:2475 作者:lreach 欄目:游戲開發(fā)

環(huán)境:win10, Unity2018, vs2015

最近在研究把場景打成AB包進行加載
但是發(fā)現(xiàn)之前設置的天空盒,這樣加載場景后就一片粉了

其實就是材質(zhì)shader丟失導致天空變粉
Unity場景打AssetBundle包,加載后天空盒材質(zhì)丟
如上圖,如果是直接在Unity里運行這個場景當然是沒問題的

那么要解決這個問題,需要幾個步驟,還要借助代碼(注:這只是我個人的解決辦法)

  1. Graphics設定
    Unity菜單:Edit->Prject Settings->Graphics
    Unity場景打AssetBundle包,加載后天空盒材質(zhì)丟
    注意在Always Included Shaders選項里
    把這個Skybox用的內(nèi)建shader(Skybox/6 Sided)加入到列表中
  2. 打包時,把你用的天空盒材質(zhì)球,比如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在前面提到,是天空盒材質(zhì)的包)
    {
        yield return www;
        if(www.error==null)
        {
            var a=www.assetBundle;
            Material m = a.LoadAsset("skybox8.mat") as Material;//skybox8.mat前述提到
          //雖然材質(zhì)打包了,但是也沒有shader,所以需要下面這行
            m.shader=Shader.Find("Skybox/6 Sided");
            //因為咱們在前面步驟中在Graphics設定里把這個shader加入了,所以能Find到
            RenderSettings.skybox=m;//把加好shader的材質(zhì)賦給場景
        }
    }
}

如上,這樣才能把天空材質(zhì)加載上

RenderSettings.skybox

這個是在場景l(fā)ighting面板里設置的天空,咱們這里需要上面的代碼來賦值
Unity場景打AssetBundle包,加載后天空盒材質(zhì)丟

這樣就可以了

注:加載打成ab包的場景,場景里的模型材質(zhì)shader是不會丟的

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI