1. 程式人生 > >Unity動態載入LightMap

Unity動態載入LightMap

  大家好,我是小唐!最近做一個要動態載入LightMap因為好多的現在的平臺都希望包小一點,然後像頁遊的話要想優化的話,大部分裡面的資源都是要進行動態載入的。開始的時候自己也是沒有什麼思路,看到網上的大神的一些分享有的是說把光照貼圖做成asset然後在對其進行打包,然江我就找了一些網上的資料,看見好多分享的程式碼都是要麼就是裡面有些變數不存在,反正是不完整,我試過好多但是都沒有成功。然後我在這裡做的就只是單說動態載入光照貼圖,至於模型和材質的話後面如果有時間的話,我做出來的話會繼續分享的。我動態載入光照貼圖的思路是直接按照以往的打包方式進行打包,用WWW類去進行下載,下載下來之後在進行型別的轉換等操作。好了直接看程式碼部分吧。

  先說一下打包的程式碼,和往常的一樣:

這是我們資源打包的程式碼,選中你要打包的光照貼圖直接進行打包就可以了。然後看一下我載入的程式碼,一張圖看不完所以直接上程式碼了:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class LoadLightMapAsset : MonoBehaviour
{
    /// <summary>
    /// 下載AssetBundle的路徑
    /// </summary>
    private string path = "file:///D:/New

Resource.assetbundle";

    /// <summary>
    /// 定義儲存LightMap的List泛型集合
    /// </summary>
    //Texture2D[] lightmapTexture;
    List<Texture2D> lightmapTexture = new List<Texture2D>();

    /// <summary>
    /// 資料結構
    /// </summary>
    private LightmapData[] lmData;
    /// <summary>
    /// LightMap的數量
    /// </summary>
    private int indexNum;

    void Start()
    {
        //呼叫
        StartCoroutine(DownloadAsset());
    }

    /// <summary>
    /// 下載資源
    /// </summary>
    /// <returns></returns>
    IEnumerator DownloadAsset()
    {
        WWW www = new WWW(path);
        yield return www;
     
        if (www.isDone)
        {
            Object[] obj = www.assetBundle.LoadAll();
            for (int i = 0; i < obj.Length; i++)
            {
                //把Object裡面的物件全部加入lightmapTexture集合中
                lightmapTexture.Add(obj[i] as Texture2D);
                Debug.Log(obj[i].GetType());
            }
            //初始化LightMap的圖片數量
            indexNum = lightmapTexture.Count;

            lmData = new LightmapData[indexNum];

            for (int i = 0; i < indexNum; i++)
            {
                LightmapData lightmap = new LightmapData();
                //把每張圖片與陣列下表相對應
                lightmap.lightmapFar = lightmapTexture[i];
                lmData[i] = lightmap;
            }
            //賦值
            LightmapSettings.lightmaps = lmData;
        }
    }
}
打包出來的assetbundle直接放在你的計算機某個盤裡面去測試就好,我的放在D盤測試的。然後生成專案之後直接就看到效果了。

打包之前的lightmap:

這個光照貼圖的地方什麼都沒有場景裡面都是暗的。

下面看一下我啟動生成之後的效果:

這個是生成之後的結果,可以看到光照貼圖載入進來了。這個載入的方法我在Web和安卓平臺上測試過了,是可以的,其他的平臺沒有測試。繼續努力。——小唐

相關推薦

Unity動態載入LightMap

  大家好,我是小唐!最近做一個要動態載入LightMap因為好多的現在的平臺都希望包小一點,然後像頁遊的話要想優化的話,大部分裡面的資源都是要進行動態載入的。開始的時候自己也是沒有什麼思路,看到網上的大神的一些分享有的是說把光照貼圖做成asset然後在對其進行打包,然江我

unity動態載入FBX模型(Http下載到Rescources檔案,場景Load直接呼叫):

using UnityEngine; using System.Collections; using System.IO; using System.Net; using System; using UnityEditor;    public class WWWLo

unity動態載入場景Resources.Load方法

Resources.Load:使用這種方式載入資源,首先需要下Asset目錄下建立一個名為Resources的資料夾(可以不在一級目錄,二級目錄也可以),這個命名是U3D規定的方式,然後把資原始檔放進去,當然也可以在Resources中再建立子資料夾,程式碼載入時需要新增相應的資源路徑。 下面是一個簡de

Unity 動態載入與記憶體(一)

Unity裡有兩種動態載入機制:一是Resources.Load,一是通過AssetBundle,其實兩者本質上我理解沒有什麼區別。Resources.Load就是從一個預設打程序序包裡的AssetBundle里加載資源,而一般AssetBundle檔案需要你自己建立,執行

unity動態載入資源

初學Unity的過程中,會發現打包釋出程式後,unity會自動將場景需要引用到的資源打包到安裝包裡,沒有到的不會跟進去。我們在編輯器裡看到的Asset中的檔案結構只是工作於編輯器環境下的,在遊戲中unity會重新組織資料庫。這是我們一定會遇到一個需求,即動態的載入我們自己的檔

Unity動態載入資源-Resource.Load

unity中使用Resource.Load載入資源前提--Asset下存在Resources資料夾且要載入的資源在Resources目錄下; Resources.Load返回一個Object型別,因此在例項化時應進行型別轉換 當然也可以在載入時便進行型別轉換,這樣就可以避

Unity 動態載入與記憶體(二)

Unity幾種動態載入Prefab方式的差異: 其實存在3種載入prefab的方式: 一是靜態引用,建一個public的變數,在Inspector裡把prefab拉上去,用的時候instantiate 二是Resource.Load,Load以後instantiate 三是

Unity 動態載入物體

1.建立一個testone物體(或介面), 2.建立指令碼 3.建立一個按鈕,將testone拖到resorces下的Prefabs 4.關鍵方法:  GameObject go = Instantiate<GameObject>(Resources.Load&

Unity 全域性光照LightMap 動態載入

Unity5 裡面, 當場景裡的物體儲存成Prefab之後,LightMap的資訊就會丟失。Fuck。。 所以最後就寫了個指令碼,把每個Render裡的lightmap紀錄下來,當prefab例項化之後,重新設定。 上程式碼。。 相關設定: 注意事項:檢查下是否勾選了

unity Editor自動生成材質及動態載入資源

最近這兩天在做一個專案,然後裡面有六十多個素材,還要全部生成材質球,差點人都廢了,然後去手冊上著了一下可以自動生成材質球的程式碼。然後自動生成材質球的過程中我還想要給材質球賦予一個預設的漫反射貼圖,貼圖是從網上下載來的,踩了數不清的坑之後終於搞定了。

unity 程式碼動態載入材質求 (Material)

首先新建一個shader,在progect面板中右鍵Create->Shader->Standard Surface Shader.右鍵剛才新建的shader,選擇Create->Material,unity會自動建立一個名稱格式為Custom_shader

UnityUnity資源池的動態載入釋放和記憶體優化處理

需求環境         在上一級的【解決方案】文章中,我們設計出了動態載入資源的業務流程,而這一節,我們就通過一些簡單的程式碼,來實現出業務流程中的效果。        吸取之前文章的經驗,如

[Unity熱更新]動態載入

參考連結: http://www.xuanyusong.com/archives/1919 對於動態載入,主要有兩種方式: 1.使用Resources.Load 2.使用AssetBundle 在遊戲中,有一個很常見的情況: 有多個場景,且一開始時場景中角色和攝像機的位

Unity學習筆記007.動態載入和銷燬Prefabs

參考: Unity學習筆記(5):動態載入Prefab:link Unity中例項化遊戲物體和銷燬遊戲物體:link Unity3d在指令碼中銷燬預設體時遇到的問題:link The name `AssetDatabase’ does not exist i

Unity中資源動態載入的幾種方式比較

初學Unity的過程中,會發現打包釋出程式後,unity會自動將場景需要引用到的資源打包到安裝包裡,沒有到的不會跟進去。我們在編輯器裡看到的Asset中的檔案結構只是工作於編輯器環境下的,在遊戲中unity會重新組織資料庫。這是我們一定會遇到一個需求,即動態的載入我們自己的

UnityUnity中資源動態載入的兩種方式之AssetsBundle

首先要說的是,我們的工程中有2個指令碼,分別是:Build(編輯器類指令碼,無需掛載到任何物體),但是必須要把Build指令碼放到Editor資料夾中Load指令碼,掛載到攝像機上<pre name="code" class="csharp">using Uni

[Unity]執行時用AnimatorOverrideController動態載入動畫片段

專案中經常會遇到這種情況:很多模型動畫的AnimatorController是一模一樣的(比如人類男,人類女),但是由於在AnimatorController中需要為每個State指定具體的Motion(比如人類女的Run和Attack要分別指定Human_Female_R

Unity 5.x動態載入光照資訊(所有坑已踩)

能搜到這的應該是被新的烘焙系統坑了少時間,4.x到5.x美術必須重新烘焙,關於美術的沒什麼說的,只有---重新烘焙!   新的烘焙系統,為了相容5.x的多場景編輯功能,將烘焙資訊從mesh全部挪到了一箇中間件xxx.assets,這個資原始檔在5.x烘焙完成後和光照貼圖

Android中apk動態載入技術研究(2)android插件化及實現

name creat package path iss fontsize 調用 dex con 了解了android中類載入的前期知識點後,來看看android中DexClassLoader詳細的實現 詳細載入流程例如以下: 宿主程序會到文件系統比

喜羊羊系列之【設備-驅動 動態載入進內核】

popu error 驅動 abi free -s map .net obj 博客:http://blog.csdn.net/muyang_ren 這篇和設備驅動編