Unity中动态切换光照贴图的方法

server/2025/3/3 3:51:08/

关键代码:LightmapSettings.lightmaps = lightmapDatas;

LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap

这里只操作前两张:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class LightingSwitchBtn : MonoBehaviour
{public bool IsTurnOn = false;// / 光照信息LightmapData[] lightmapDatas;/// 暗的时候的贴图public Texture2D[] lightmapDark;public Texture2D[] lightmapDarkDir;/// 亮的时候的贴图public Texture2D[] lightmapLight;public Texture2D[] lightmapLightDir;void Awake(){}public void OnPointerClick(){Debug.Log("1111");SwichState();}public void SwichState(){Debug.Log("2222");bool ClickState = !IsTurnOn;if (ClickState){SetLightMap(lightmapLight, lightmapLightDir);}else{SetLightMap(lightmapDark, lightmapDarkDir);}IsTurnOn = ClickState;}public void SetLightMap(Texture2D[] lightmapTex, Texture2D[] lightmapDir){if (lightmapTex == null){return;}lightmapDatas = new LightmapData[lightmapTex.Length];for (int i = 0; i < lightmapTex.Length; i++){LightmapData lmd = new LightmapData();lmd.lightmapColor = lightmapTex[i];lmd.lightmapDir = lightmapDir[i];lightmapDatas[i] = lmd;}LightmapSettings.lightmaps = lightmapDatas;}}

更新光照贴图后,还需要更新天空球,这里以HDRP管线为例,URP和build in同理:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.UI;public class LightingSwitchBtn : MonoBehaviour
{public bool IsTurnOn = false;LightmapData[] lightmapDatas;   /// 光照信息[Header("上午")] /// 亮的时候的贴图public Texture2D[] lightmapLightDir;public Texture2D[] lightmapLight;[Header("下午")]  /// 暗的时候的贴图public Texture2D[] lightmapDarkDir;public Texture2D[] lightmapDark;[Header("晚上")]/// 晚上的贴图public Texture2D[] lightmapNightDir;public Texture2D[] lightmapNight;[Header("天空")]public Texture SkyAM;public Texture SkyPM;public Texture SkyNight;[Header("Volume组件")]public Volume myVolume;public Texture mySkyTex;private HDRISky hdriSky;[Range(0,1)]public float TimeSwitch = 0;#region BoolIsTurnOn// public void SwichState()// {//     Debug.Log("啊啊啊");//     bool ClickState = !IsTurnOn;//     if (ClickState)//     {//         SetLightMap(lightmapLight, lightmapLightDir);//     }//     else//     {//         SetLightMap(lightmapDark, lightmapDarkDir);//     }//     IsTurnOn = ClickState;// }#endregion//天空切换void Awake(){VolumeProfile volumeProfile = myVolume.profile;volumeProfile.TryGet<HDRISky>(out hdriSky);mySkyTex = hdriSky.hdriSky.value;}//光照贴图切换public void AM_Time(){Debug.Log("AM");SetLightMap(lightmapLight, lightmapLightDir);hdriSky.hdriSky.value = SkyAM;}public void PM_Time(){Debug.Log("PM");SetLightMap(lightmapDark, lightmapDarkDir);hdriSky.hdriSky.value = SkyPM;}public void Night_Time(){Debug.Log("Night");SetLightMap(lightmapNight, lightmapNightDir);hdriSky.hdriSky.value = SkyNight;}public void SetLightMap(Texture2D[] lightmapTex, Texture2D[] lightmapDir){if (lightmapTex == null){return;}lightmapDatas = new LightmapData[lightmapTex.Length];for (int i = 0; i < lightmapTex.Length; i++){LightmapData lmd = new LightmapData();lmd.lightmapColor = lightmapTex[i];lmd.lightmapDir = lightmapDir[i];lightmapDatas[i] = lmd;}LightmapSettings.lightmaps = lightmapDatas;}}


http://www.ppmy.cn/server/171970.html

相关文章

React + TypeScript 实现数据模型驱动 SQL 脚本生成

React TypeScript 实现数据模型驱动 SQL 脚本生成全栈实践 引言&#xff1a;数据模型与 SQL 的桥梁革命 在现代化全栈开发中&#xff0c;数据模型与数据库的精准映射已成为提升开发效率的关键。传统手动编写 SQL 脚本的方式存在模式漂移风险高&#xff08;Schema Drift&#…

FPGA开发时序图绘制

开始的时候画时序图都是拿 visio 硬连&#xff0c;但是那个线宽太难统一了&#xff0c;丑不拉几的&#xff0c;遂学习 waveform 语法使用代码来画时序图。 开始 Vscode 中安装 waveform render 或者在 GitHub 搜索 wavedrom 安装即可。由于 vscode 是我常用的编辑器&#xff…

【Qt】MVC设计模式

目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层&#xff0c;关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…

DNS域名解析原理及解析过程

域名系统的概述 域名 IP地址是互联网上计算机唯一的逻辑地址&#xff0c;通过IP地址可以实现不同计算机之间的相互通信。但由于IP地址是由一串容易混淆的数字串构成&#xff0c;人们很难记忆所有计算机的IP地址&#xff0c;这样对于我们日常工作生活访问不同网站是很困难的。…

利用DeepSeek-Kimi打通Excel与PPT的链条,自动生成数据分析报告

通过DeepSeek在Excel生成结构化的数据分析报告&#xff0c;再借助Kimi的PPT助手将报告自动转换为专业的PPT演示文稿&#xff0c;从而实现从数据到展示的一站式解决方案。 案例数据 1.一键生成数据分析报告 在下载并安装“Excel矩阵”后&#xff0c;我们启用DeepSeek的右侧对话…

安全运营的“黄金4小时“:如何突破告警疲劳困局

在当今复杂多变的网络安全环境中&#xff0c;安全团队面临着前所未有的挑战。尤其是面对高级持续性威胁&#xff08;APT&#xff09;时&#xff0c;最初的“黄金4小时”成为决定成败的关键窗口。在这段时间内&#xff0c;快速而准确地响应可以极大地降低损失&#xff0c;然而&a…

构建神经网络之Matplotlib(持续完善)

1.plot plot的数据是numpy数组 参数&#xff1a; # 画单条线 plot([x], y, [fmt], *, dataNone, **kwargs) # 画多条线 plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)一个简单例子 import matplotlib.pyplot as plt import numpy as npxpoints np.array([1, 8]) …

C语言综合案例:学生成绩管理系统

C语言综合案例&#xff1a;学生成绩管理系统 需求 1.存储最多50名学生的信息&#xff08;不使用结构体&#xff09; 2.每个学生包含&#xff1a; 学号&#xff08;字符数组&#xff09;姓名&#xff08;字符数组&#xff09;3门课程成绩&#xff08;一维数组&#xff09; …