forked from chinosk/gkms-localify-dmm
5.6 KiB
5.6 KiB
Gakumas纹理替换功能融合说明
概述
本项目已成功将 gakumas-texture-TL 项目的纹理替换功能完整集成到主项目中。现在只需要使用 version.dll 一个文件即可同时实现文字翻译和纹理替换功能。
主要改动
1. 新增模块
TextureReplace模块 (src/GakumasLocalify/TextureReplace.h/cpp)
- 负责纹理替换的核心功能
- 包含资源映射配置加载
- 图片文件加载和Unity Texture2D对象创建
- 待替换请求管理
2. Hook集成
修改 src/GakumasLocalify/Hook.cpp
- 在
AssetBundle_LoadAssetAsyncHook中添加纹理替换检测 - 在
AssetBundleRequest_GetResultHook中返回替换后的纹理 - 在初始化流程中调用
TextureReplace::Initialize()
3. 配置系统
Config配置项 (src/GakumasLocalify/config/)
- 添加
enableTextureReplace配置项 - 在
Config.hpp中声明 - 在
Config.cpp中实现加载和保存
4. 资源目录结构
resource/local-files/textures/
├── asset_mapping.txt # 资源映射配置文件
├── comic/ # 漫画图片
│ ├── 1ko/ # 一格漫画
│ └── 4ko/ # 四格漫画
├── general_report/ # 好感度偶像档案
├── ui/ # UI按钮图片
└── tutorial/ # 教程图片
使用方法
1. 启用纹理替换功能
编辑 resource/localizationConfig.json,添加或修改:
{
"enableTextureReplace": true
}
2. 配置资源映射
编辑 resource/local-files/textures/asset_mapping.txt:
# 格式: assetId=本地文件路径
img_general_comic_0001=comic/1ko/img_general_comic_0001.png
img_general_comic4_0000=comic/4ko/img_general_comic4_0000.png
img_general_report_akapen_amao-001=general_report/amao/img_general_report_akapen_amao-001.png
3. 放置图片文件
将替换用的图片文件放置到对应的子目录中:
comic/1ko/- 一格漫画comic/4ko/- 四格漫画general_report/- 好感度档案ui/- UI按钮tutorial/- 教程图片
4. 启动游戏
只需要将编译生成的 version.dll 放到游戏目录即可,无需其他DLL文件。
技术细节
Hook工作流程
-
AssetBundle_LoadAssetAsync Hook
- 拦截Unity的资源加载请求
- 检查资源名称是否在映射表中
- 如果需要替换,加载本地图片文件
- 创建Unity Texture2D对象
- 将替换信息存储到待处理映射表中
-
AssetBundleRequest_GetResult Hook
- 拦截Unity获取加载结果的请求
- 检查是否有待替换的纹理
- 如果有,返回替换后的纹理对象
- 否则返回原始资源
-
自动清理机制
- 每30秒自动清理超时(60秒)的待处理请求
- 防止内存泄漏
IL2CPP API使用
通过动态获取IL2CPP函数指针实现:
il2cpp_domain_get- 获取应用域il2cpp_class_from_name- 查找类il2cpp_object_new- 创建对象il2cpp_runtime_invoke- 调用方法
与xinput1_3.dll版本的区别
| 特性 | xinput1_3.dll版本 | version.dll集成版本 |
|---|---|---|
| DLL数量 | 2个 (version.dll + xinput1_3.dll) | 1个 (version.dll) |
| 功能集成 | 分离 | 统一 |
| 配置管理 | 独立配置 | 统一配置系统 |
| 日志系统 | 独立日志 | 统一日志系统 |
| 维护性 | 需要维护两套代码 | 单一代码库 |
迁移指南
如果你之前使用xinput1_3.dll版本:
- 备份你的图片文件和
asset_mapping.txt - 将
asset_mapping.txt复制到resource/local-files/textures/ - 将所有图片文件按目录结构复制到
resource/local-files/textures/对应子目录 - 在
resource/localizationConfig.json中设置"enableTextureReplace": true - 删除游戏目录中的
xinput1_3.dll - 使用新编译的
version.dll替换原有的文件
注意事项
-
性能影响: 纹理替换只对配置文件中列出的资源生效,不会影响其他资源的加载性能
-
图片格式: 支持PNG、JPG等Unity支持的常见图片格式
-
路径分隔符: 在
asset_mapping.txt中,可以使用正斜杠(/)或反斜杠(\) -
日志输出: 纹理替换相关的日志会输出到控制台和日志文件中,前缀为 "TextureReplace:"
-
错误处理: 如果本地文件不存在或加载失败,会自动使用游戏原始资源
调试
启用调试模式查看详细日志:
{
"enableConsole": true,
"dbgMode": true,
"enableTextureReplace": true
}
日志会显示:
- 初始化过程
- 加载的映射数量
- 每次资源替换的详细信息
- 错误和警告信息
常见问题
Q: 纹理没有被替换? A: 检查以下几点:
enableTextureReplace是否设置为trueasset_mapping.txt中的资源ID是否正确- 图片文件是否存在于指定路径
- 查看日志输出是否有错误信息
Q: 游戏启动后控制台显示什么? A: 如果启用纹理替换,会看到:
TextureReplace: Initializing texture replacement system...
TextureReplace: Created texture directories at: ...
TextureReplace: IL2CPP API initialized successfully
TextureReplace: Loaded X asset mappings
TextureReplace: Texture replacement system initialized successfully
Q: 可以动态添加新的替换图片吗?
A: 可以,修改 asset_mapping.txt 并添加新图片后,重启游戏即可生效
开发者信息
- 原xinput1_3版本: gakumas-texture-TL项目
- 集成版本: 本项目
- 集成时间: 2025年11月26日
技术支持
如遇到问题,请:
- 检查日志输出
- 确认配置文件格式正确
- 验证图片文件可以正常打开
- 查看游戏目录权限设置