public static void SetLightmap()
    {
        LightmapSaver[] dataHolders     = FindObjectsOfType <LightmapSaver>();
        LightmapData[]  lightmapDataArr = new LightmapData[dataHolders.Length];
        for (int i = 0; i < dataHolders.Length; i++)
        {
            var          holder    = dataHolders[i];
            LightmapData lightData = new LightmapData();
            lightData.lightmapColor = holder.lightmapColor;
            lightData.lightmapDir   = holder.lightmapDir;
            lightmapDataArr[i]      = lightData;
        }
        LightmapSettings.lightmaps = lightmapDataArr;

        for (int i = 0; i < dataHolders.Length; i++)
        {
            LightmapSaver holder = dataHolders[i];
            for (int j = 0; j < holder.RendererData.Length; j++)
            {
                var data = holder.RendererData[j];
                data.renderer.lightmapIndex       = i;
                data.renderer.lightmapScaleOffset = data.lightmapScaleOffset;
            }
        }
    }
Beispiel #2
0
    void Start()
    {
        foreach (var l in lightthings)
        {
            Instantiate <LightmapSaver>(l);
        }

        LightmapSaver.SetLightmap();
    }
    static void LightmapSaverEditorSimplePasses() {
        LightmapSaver[] dataHolders = GameObject.FindObjectsOfType<LightmapSaver>();
        for(int i = 0; i < dataHolders.Length; i++)
        {
            var holder = dataHolders[i];
            GameObject root = holder.gameObject;
            LightmapSaver pSaver = root.GetComponentInParent<LightmapSaver>();
            if(null != pSaver && pSaver.gameObject != root)
            {
                EditorUtility.DisplayDialog("错误", string.Format("游戏物体{0}的父节点{1}包含有 LightmapSaver 组件,这是不允许的。", root.gameObject.name, pSaver.gameObject.name),"确定");
                return;
            }
            var cSaver = root.GetComponentInChildren<LightmapSaver>();
            if(null != cSaver && cSaver.gameObject != root)
            {
                EditorUtility.DisplayDialog("错误", string.Format("游戏物体{0}的子节点{1}包含有 LightmapSaver 组件,这是不允许的。", root.gameObject.name, cSaver.gameObject.name), "确定");
                return;
            }

            Lightmapping.Clear();
            Lightmapping.Bake();//开始烘焙

            var renderers = root.GetComponentsInChildren<Renderer>(true);

            holder.RendererData = new LightmapSaver.LightmapRendererData[renderers.Length];
            for (int j = 0; j < renderers.Length; j++)
            {
                var renderer = renderers[j];
                holder.RendererData[j] = new LightmapSaver.LightmapRendererData();
                Debug.Log(renderer.gameObject.name);
                if (renderer.lightmapIndex == -1) continue;
                var rendererData = holder.RendererData[j];
                rendererData.renderer = renderer;
                rendererData.lightmapIndex = renderer.lightmapIndex;
                rendererData.lightmapScaleOffset = renderer.lightmapScaleOffset;
            }
            if(LightmapSettings.lightmaps.Length > 0)
            {
                holder.lightmapColor = LightmapSettings.lightmaps[0].lightmapColor;
                holder.lightmapDir = LightmapSettings.lightmaps[0].lightmapDir;
            }
            else
            {
                EditorUtility.DisplayDialog("烘焙失败", "没有成功生成光照贴图。", "确定");
                return;
            }
        }
        EditorUtility.DisplayDialog("烘焙成功", "烘焙已经完成。", "确定");
    }