

一个用于游戏 《放松时光:与你共享Lo-Fi故事》 的实时天气同步 BepInEx 插件,可以根据真实世界的天气情况自动调整游戏内的环境效果,或基于现实时间模拟昼夜循环。
「放松时光:与你共享Lo-Fi故事」是一个与喜欢写故事的女孩聪音一起工作的有声小说游戏。您可以自定义艺术家的原创乐曲、环境音和风景,以营造一个专注于工作的环境。在与聪音的关系加深的过程中,您可能会发现与她之间的特别联系。
所有代码均由 AI 编写,人工仅作反编译和排错处理。 这是我第一次用 AI 为 Unity 游戏做 MOD,有问题请反馈,虽然反馈了我也是再去找 AI 修就是了🫥
关联我写的第二个土豆 mod:iGPUSaviorMod
关联 BILIBILI 视频:时间、天气与土豆 (<-- 评价为:纯引流,啥干货没有)
UnlockAllEnvironments:是否解锁所有环境UnlockAllDecorations: 是否解锁所有装饰品UnlockPurchasableItems:是否解锁所有游戏币解锁内容F7 - 强制刷新天气
F8 - 显示当前状态
F9 - 手动触发同步
注:游戏逻辑上只能同时存在一个开启,但是实际上可以强开多个。感觉除了平滑切换场景能用上外感觉没啥必要提这一嘴
注:下列为游戏内效果,具体现实天气对应逻辑请看下文“使用方法”部分
开启彩蛋功能后,系统可能会随机或者在满足特定条件后主动开启某些风景效果。
开启彩蛋功能后,系统可能会在满足特定条件后主动开启某些声音效果。
🗒️ 本项目的未来计划和待办清单
⚠️ 重要:必须按顺序安装!
⚠️ 重要:请在发布/releases界面下载 dll 文件
BepInEx/plugins/ 文件夹已创建RealTimeWeatherMod.dll 放入 BepInEx/plugins/ 目录BepInEx/config/chillwithyou.envsync.cfg)F7 可以刷新配置常见问题:
*.dll,说明你下载的是源码(Source code),而不是发布产物(releases)首次运行后,配置文件将生成在 BepInEx/config/chillwithyou.envsync.cfg
[Automation]
## 启用季节性彩蛋与环境音效自动托管
EnableSeasonalEasterEggs = true
[Debug]
## 是否开启调试模式 | 非调试请勿动
EnableDebugMode = false
## 模拟天气代码
SimulatedCode = 13
## 模拟温度
SimulatedTemp = 13
## 模拟天气描述
SimulatedText = DebugWeather
[Internal]
## 上次同步日期 | 非调试请勿动
LastSunSyncDate = 2025-12-02
[TimeConfig]
## 日出时间(格式:HH:mm) | 5.1.2版本不用手动修改
Sunrise = 06:30
## 日落时间(格式:HH:mm) | 5.1.2版本不用手动修改
Sunset = 18:30
[UI]
## 是否在游戏日期栏显示实时天气和温度
ShowWeatherOnDate = true
[Unlock]
## 是否自动解锁所有环境场景 | 可能包含某些未实装的场景,谨慎开启
UnlockAllEnvironments = true
## 是否自动解锁所有装饰品 | 可能包含某些未实装的饰品,谨慎开启
UnlockAllDecorations = true
## 解锁游戏币购买内容 | 可能大幅缩短游戏寿命,谨慎开启
UnlockPurchasableItems = false
[WeatherAPI]
## 是否启用天气 API 同步 | 不开启大部分功能无法使用
EnableWeatherSync = false
## 心知天气 API Key | v5.1.2版本后,留空可直接使用内置密钥
SeniverseKey =
## 城市名称(拼音或中文,如:beijing、上海,ip 表示自动定位)
Location = beijing
[WeatherSync]
## 天气API刷新间隔(分钟) | 非调试请勿动
RefreshMinutes = 30
💡 新版本内置密钥,留空也可用天气服务。自己申请也可用,看个人喜好
控制台 - 产品管理 - 免费版(如果你是试用版或者其他版本,请选择对应版本)SeniverseKey 字段,无需添加引号等特殊符号EnableWeatherSync = true 启用天气同步插件默认会根据配置的日出日落时间自动切换环境:
按照上述方法配置好 API Key
插件将每隔指定时间(默认 30 分钟)自动获取天气并更新环境
环境映射规则:
| 环境 | 正常天气 | 恶劣天气 |
|---|---|---|
| ☀️ 白天(Day) | 日出 → 日落前30分钟 | — |
| 🌅 黄昏(Sunset) | 日落前30分钟 → 日落后30分钟 | — |
| ☁️ 多云(Cloudy) | — | 日出 → 日落后30分钟 |
| 🌙 夜晚(Night) | 日落后30分钟 → 日出 | 日落后30分钟 → 日出 |
💡 恶劣天气时,白天和黄昏时段统一显示为多云环境,黄昏效果会被跳过。夜晚环境不受天气影响,始终在日落后 30 分钟准时切入。
4, 7, 8, 9 (多云/阴天)
11, 12, 14-20 (中雨及以上, 雷暴, 冻雨)
23-25 (中雪及以上)
26-31 (沙尘/雾)
34-36 (风暴)
| 游戏效果代码 | 对应 API 天气 ID (参考) | 逻辑说明 |
|---|---|---|
| Snow | 20-25 (雪/雨夹雪/暴雪) | 所有的雪类,统统下雪。 |
| ThunderRain | 11, 12, 16, 17, 18 (雷/暴雨) | 雷阵雨、暴雨、特大暴雨,上强度。 |
| HeavyRain | 10, 14, 15 (阵雨/中雨/大雨) | 普通的下雨,量比较大。 |
| LightRain | 13, 19 (小雨/冻雨) | 淅淅沥沥的小雨。 |
| OFF (关闭) | 0-9, 26-39 (晴/多云/阴/雾/风) | 关键点:如果是阴天或多云,必须强制关闭所有雨雪效果! |
读取缓存:直接读取内存中的 _cachedWeather(如果没缓存,只算时间)。
重算时间:根据当前秒数 (DateTime.Now),重新计算是白天、黄昏还是夜晚。
暴力执行:
调用 ForceActivateEnvironment。
强制模拟点击 MainIcon(即使它看起来是亮着的)。
强制调用 WindowViewService.ChangeWeatherAndTime。
强制写入 SaveDataManager。
注:版本号为 AI 自己写的,不关我的事,我也不知道为啥它刷版本号为什么这么随意
SceneryAutomationSystem 类(继承 MonoBehaviour),挂载在 Runner 上,这样它有自己的 Update 循环,不干扰原本的天气同步逻辑SceneryRule。这样以后我想加新彩蛋,只需要在列表里加一行配置,不用改核心代码Hook 游戏的点击事件,一旦用户手动点过某个开关,系统就把这个开关拉入“黑名单”,本局游戏不再自动接管。(<---这不是偷懒吗?)ShowWeatherOnDate,用于控制是否在日期后追加显示天气和温度Unity.TextMeshPro.dllF9 会导致所有环境被错误关闭的问题F9 会导致所有环境被错误关闭的问题F7 没反应的问题,加了个输出说是F9 按键逻辑,优化日志提示缓存逻辑是这样的:
- 数据存储:有一个静态变量
_cachedWeather存在内存里。- 有效期:60 分钟 (
TimeSpan.FromMinutes(60)).- 快钟 (30 秒一次):
- 只读缓存。如果缓存里有数据,直接拿来用,不发网络请求(不费流量)。
- 它会利用缓存里的“晴/雨”状态,重新结合“当前每一秒的时间”来判断是否该日落了。
- 注:本来想让 AI 写定时器的,但是 AI 说不如这个,我不懂所以听他的
- 慢钟 (30 分钟一次):
- 强制更新。即使缓存没过期(60 分钟),只要到了用户设定的刷新间隔(默认 30 分钟),就会尝试发起新的 API 请求来刷新数据。
MainIcon 方式详细更新日志请查看 Git 提交记录
欢迎提交 Issue 和 Pull Request!
如需反馈问题,请先确保问题“可复现”,并开启调试日志(BepInEx/config/BepInEx.cfg 中将 Logging.Console 设置为 true)。
这时,游戏启动时会在控制台输出详细日志,有助于定位问题。
本项目采用 MIT 许可证 开源。
⚠️ 重要声明:
详见 LICENSE 文件。
免责声明:
本插件仅供学习交流使用,请勿用于商业用途。使用本插件产生的任何问题与作者无关。
本项目为粉丝自制 (Fan-made),与游戏开发商及发行商无关。
游戏《Chill with You - Lo-Fi Story》及其相关素材、商标的版权均归原作者所有。
即使生活一团糟,但也要心存希望