Unity动态加载LightMap

  大家好,我是小唐!最近做一个要动态加载LightMap因为好多的现在的平台都希望包小一点,然后像页游的话要想优化的话,大部分里面的资源都是要进行动态加载的。开始的时候自己也是没有什么思路,看到网上的大神的一些分享有的是说把光照贴图做成asset然后在对其进行打包,然江我就找了一些网上的资料,看见好多分享的代码都是要么就是里面有些变量不存在,反正是不完整,我试过好多但是都没有成功。然后我在这里做的就只是单说动态加载光照贴图,至于模型和材质的话后面如果有时间的话,我做出来的话会继续分享的。我动态加载光照贴图的思路是直接按照以往的打包方式进行打包,用WWW类去进行下载,下载下来之后在进行类型的转换等操作。好了直接看代码部分吧。

  先说一下打包的代码,和往常的一样:

Unity动态加载LightMap_第1张图片

这是我们资源打包的代码,选中你要打包的光照贴图直接进行打包就可以了。然后看一下我加载的代码,一张图看不完所以直接上代码了:

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

public class LoadLightMapAsset : MonoBehaviour
{
    ///


    /// 下载AssetBundle的路径
    ///

    private string path = "file:///D:/New Resource.assetbundle";

    ///


    /// 定义存储LightMap的List泛型集合
    ///

    //Texture2D[] lightmapTexture;
    List lightmapTexture = new List();

    ///


    /// 数据结构
    ///

    private LightmapData[] lmData;
    ///
    /// LightMap的数量
    ///

    private int indexNum;

    void Start()
    {
        //调用
        StartCoroutine(DownloadAsset());
    }

    ///


    /// 下载资源
    ///

    ///
    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:

Unity动态加载LightMap_第2张图片

这个光照贴图的地方什么都没有场景里面都是暗的。

下面看一下我启动生成之后的效果:

Unity动态加载LightMap_第3张图片

这个是生成之后的结果,可以看到光照贴图加载进来了。这个加载的方法我在Web和安卓平台上测试过了,是可以的,其他的平台没有测试。继续努力。——小唐

你可能感兴趣的:(Unity技术)