Ejemplo n.º 1
0
    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
        }
    }
Ejemplo n.º 4
0
    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();
    }
Ejemplo n.º 5
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
        }
    }