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); }
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 } }