IEnumerator loadSceneLightmapData(Action <SceneLightmapData> callback) { int sds = 0; if (assetBundle != null) { String[] allAssetNames = assetBundle.GetAllAssetNames(); if (allAssetNames.Length == 1) { SceneLightmapData sceneLightmapData2 = assetBundle.LoadAsset(allAssetNames[0]) as SceneLightmapData; Debug.Log(sceneLightmapData2.m_sceneName); callback(sceneLightmapData2); // StopCoroutine("loadSceneLightmapData"); yield return(new WaitForEndOfFrame()); } } else { WWW www = new WWW("file://" + Application.streamingAssetsPath + streamingAssetsPath); yield return(www); if (www.isDone) { assetBundle = www.assetBundle; String[] allAssetNames = assetBundle.GetAllAssetNames(); if (allAssetNames.Length == 1) { SceneLightmapData sceneLightmapData2 = www.assetBundle.LoadAsset(allAssetNames[0]) as SceneLightmapData; Debug.Log(sceneLightmapData2.m_sceneName); callback(sceneLightmapData2); } } } }
IEnumerator loadTest(Action <SceneLightmapData> callback) { WWW www = new WWW("file://" + Application.streamingAssetsPath + "/Windows/scenelightmapdata.unity3d"); // WWW www = new WWW("jar:file://" + Application.dataPath + "!/assets/"+ "Windows/scenelightmapdata.unity3d"); yield return(www); if (www.isDone) { SceneLightmapData sceneLightmapData2 = www.assetBundle.LoadAsset("scenelightmapdata") as SceneLightmapData; Debug.Log(sceneLightmapData2.m_sceneName); callback(sceneLightmapData2); } }
void OnGUI() { if (GUI.Button(new Rect(10, 10, 100, 100), "加载灯光贴图")) { #region Unity5.x加载,ResourcesManager我已经处理了依赖的加载,可以看我之前的文章 /* ResourcesManager.Instance.LoadAssetBundle("scenelightmapdata", (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.lightmapFar = far; * data.lightmapNear = 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.FindChild(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 #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.lightmapFar = far; data.lightmapNear = 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.FindChild(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 } }
static void GetSceneLightMapData() { sceneLightMapData = ScriptableObject.CreateInstance <SceneLightmapData>(); string currSceneName = EditorApplication.currentScene; currSceneName = currSceneName.Substring(currSceneName.LastIndexOf("/") + 1); currSceneName = currSceneName.Replace(".unity", ""); //Debug.Log(currSceneName); sceneLightMapData.m_sceneName = currSceneName; LightmapData[] currSceneLightMaps = LightmapSettings.lightmaps; int length = currSceneLightMaps.Length; if (length <= 0) { EditorUtility.DisplayDialog("error", "场景" + currSceneName + ":没有LightmapData", "ok"); return; } //Debug.Log(length); sceneLightMapData.m_lightMapFarName = new string[length]; sceneLightMapData.m_lightMapNearName = new string[length]; for (int i = 0; i < length; i++) { Texture2D currLightMapFar = currSceneLightMaps[i].lightmapFar; Texture2D currLightMapNear = currSceneLightMaps[i].lightmapNear; sceneLightMapData.m_lightMapFarName[i] = currLightMapFar.name; sceneLightMapData.m_lightMapNearName[i] = currLightMapNear.name; } sceneLightMapData.m_gameObjectList = new List <GameObjectData>(); GameObject[] selectionGameObjects; if (Selection.activeGameObject) { selectionGameObjects = Selection.gameObjects; int selectedObjsLength = selectionGameObjects.Length; if (selectedObjsLength > 0) { if (selectedObjsLength > 1) { EditorUtility.DisplayDialog("Error", "你选中了多个", "ok"); return; } else { Transform _tempRoot = selectionGameObjects[0].transform; sceneLightMapData.m_gameObjectRoot = _tempRoot.name; m_transList.Add(_tempRoot); CalcAllGameObject(_tempRoot); } AddChidGameObjectData(); } } else { EditorUtility.DisplayDialog("Error", "请在Hierarchy中选中要导出的GameObject", "ok"); } sceneLightMapData.ToString(); string path = "Assets/Resources/SceneLightmapData.asset"; AssetDatabase.CreateAsset(sceneLightMapData, path); //编辑器环境下可以通过AssetDatabase.LoadAssetAtPath来加载 Object obj = AssetDatabase.LoadAssetAtPath(path, typeof(SceneLightmapData)); string bundleName = path; bundleName = bundleName.Substring(bundleName.LastIndexOf("/") + 1); bundleName = bundleName.Replace(".asset", ".unity3d"); #region Unity5.x打包方式 //打包成.unity3d文件。 AssetImporter assetImporter = AssetImporter.GetAtPath(path); assetImporter.assetBundleName = bundleName; BuildPipeline.BuildAssetBundles("Assets/StreamingAssets/Windows", 0, BuildTarget.StandaloneWindows64); #endregion //删除面板上的那个临时对象 //AssetDatabase.DeleteAsset(p); AssetDatabase.Refresh(); }
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 } }