Example #1
0
    public static GameObjectLightmapAssetBundleLoader Load(string path)
    {
        GameObject go = GameObject.Find(path);

        if (go != null)
        {
            GameObjectLightmapAssetBundleLoader gameObjectLightmapAssetBundleLoader = go.GetComponent <GameObjectLightmapAssetBundleLoader>();
            if (gameObjectLightmapAssetBundleLoader)
            {
                gameObjectLightmapAssetBundleLoader.isReLoad = true;
                return(gameObjectLightmapAssetBundleLoader);
            }
            return(go.AddComponent <GameObjectLightmapAssetBundleLoader>());
        }
        return(null);
    }
Example #2
0
    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 110, 100, 100), "加载光照贴图1"))
        {
            StartCoroutine(
                loadSceneLightmapData(
                    (sceneLightmapData) =>
            {
                //设置场景的灯光信息
                SceneLightmapData scenemapData = sceneLightmapData as SceneLightmapData;
                int Count = scenemapData.m_lightMapNearName.Length;

                LightmapData[] tempMapDatas = new LightmapData[Count];

                for (int i = 0; i < Count; i++)
                {
                    LightmapData data = new LightmapData();
                    //Texture2D near = Resources.Load(scenemapData.m_lightMapNearName[i]) as Texture2D;
                    //Texture2D far = Resources.Load(scenemapData.m_lightMapFarName[i]) as Texture2D;
                    Texture2D near = lmArr[i] as Texture2D;
                    //Texture2D far = lmArr[i * 2 + 1] as Texture2D;

                    //data.lightmapColor = far;
                    //data.lightmapDir = near;
                    data.lightmapColor = near;
                    //data.shadowMask = near;

                    tempMapDatas[i] = data;
                }

                LightmapSettings.lightmaps = tempMapDatas;
                for (int i = 0; i < scenemapData.m_gameObjectList.Count; i++)
                {
                    GameObject go = GameObject.Find(scenemapData.m_gameObjectList[i].m_name);
                    if (go == null)
                    {
                        continue;
                    }
                    Transform tempTrans              = go.transform;
                    Renderer tempRenderer            = tempTrans.GetComponent <Renderer>();
                    tempRenderer.lightmapIndex       = scenemapData.m_gameObjectList[i].m_lightmapIndex;
                    tempRenderer.lightmapScaleOffset = scenemapData.m_gameObjectList[i].m_lightmapScaleOffset;

                    //tempRenderer.sharedMaterial.shader = Shader.Find(tempRenderer.sharedMaterial.shader.name);
                }

                //设置原来烘焙时的光照模式,这个不设置正确,默认模式就会只显示光照贴图
                LightmapSettings.lightmapsMode = LightmapsMode.NonDirectional;
            }
                    )
                );
        }
        if (GUI.Button(new Rect(10 + 100, 10, 100, 100), "重置光照贴图"))
        {
            GameObjectLightmapAssetBundleLoader.Clear();
        }
        if (GUI.Button(new Rect(10, 10, 100, 100), "加载光照贴图"))
        {
            StartCoroutine(loadSceneLightmapData((sceneLightmapData) => {
                int z = 0;
                //设置场景的灯光信息
                SceneLightmapData scenemapData = sceneLightmapData as SceneLightmapData;
                int Count = scenemapData.m_lightMapNearName.Length;

                GameObjectLightmapAssetBundleLoader.Init(Count);

                AssetBundle lmAssetBundle = null;
                for (int i = 0; i < scenemapData.m_gameObjectList.Count; i++)
                {
                    lmAssetBundle = null;
                    GameObjectLightmapAssetBundleLoader.lmAbDic.TryGetValue(scenemapData.m_gameObjectList[i].lightMapName, out lmAssetBundle);
                    if (lmAssetBundle == null)
                    {
                        GameObjectLightmapAssetBundleLoader gameObjectLightmapAssetBundleLoader = GameObjectLightmapAssetBundleLoader.Load(scenemapData.m_gameObjectList[i].m_name);
                        if (gameObjectLightmapAssetBundleLoader != null)
                        {
                            gameObjectLightmapAssetBundleLoader.assetBundlePath = scenemapData.m_gameObjectList[i].lightMapName;
                            gameObjectLightmapAssetBundleLoader.index           = scenemapData.m_gameObjectList[i].m_lightmapIndex;
                            gameObjectLightmapAssetBundleLoader.scaleOffset     = scenemapData.m_gameObjectList[i].m_lightmapScaleOffset;
                            gameObjectLightmapAssetBundleLoader.count           = Count;

                            if (gameObjectLightmapAssetBundleLoader.isReLoad)
                            {
                                gameObjectLightmapAssetBundleLoader.StartLoad();
                            }
                        }
                    }
                    else
                    {
                        GameObject go = GameObject.Find(scenemapData.m_gameObjectList[i].m_name);
                        if (go == null)
                        {
                            continue;
                        }
                        Transform tempTrans              = go.transform;
                        Renderer tempRenderer            = tempTrans.GetComponent <Renderer>();
                        tempRenderer.lightmapIndex       = scenemapData.m_gameObjectList[i].m_lightmapIndex;
                        tempRenderer.lightmapScaleOffset = scenemapData.m_gameObjectList[i].m_lightmapScaleOffset;
                    }
                }

                //设置原来烘焙时的光照模式,这个不设置正确,默认模式就会只显示光照贴图
                LightmapSettings.lightmapsMode = LightmapsMode.NonDirectional;
            }));

            #region 加载

            /*
             * StartCoroutine(loadTest((obj) => {
             *
             *  //设置场景的灯光信息
             *  SceneLightmapData scenemapData = obj as SceneLightmapData;
             *  int Count = scenemapData.m_lightMapNearName.Length;
             *  LightmapData[] tempMapDatas = new LightmapData[Count];
             *  for (int i = 0; i < Count; i++)
             *  {
             *      LightmapData data = new LightmapData();
             *      Texture2D near = Resources.Load(scenemapData.m_lightMapNearName[i]) as Texture2D;
             *      Texture2D far = Resources.Load(scenemapData.m_lightMapFarName[i]) as Texture2D;
             *      data.lightmapColor = far;
             *      data.lightmapDir = near;
             *      tempMapDatas[i] = data;
             *  }
             *  LightmapSettings.lightmaps = tempMapDatas;
             *
             *  //设置每一个GameObject的lightmapIndex,lightmapScaleOffset
             *  Transform sceneRootTrans = GameObject.Find(scenemapData.m_gameObjectRoot).transform;
             *  for (int i = 0; i < scenemapData.m_gameObjectList.Count; i++)
             *  {
             *      Transform tempTrans = sceneRootTrans.Find(scenemapData.m_gameObjectList[i].m_name);
             *      Renderer tempRenderer = tempTrans.GetComponent<Renderer>();
             *      tempRenderer.lightmapIndex = scenemapData.m_gameObjectList[i].m_lightmapIndex;
             *      tempRenderer.lightmapScaleOffset = scenemapData.m_gameObjectList[i].m_lightmapScaleOffset;
             *  }
             *
             *  //动态加载完之后需要调用一下StaticBatchingUtility.Combine(RootGameObject)来将整个场景静态化,使得batching能正常使用。
             *  StaticBatchingUtility.Combine(sceneRootTrans.gameObject);
             *
             * }));
             */
            #endregion
        }
    }