1
0
Fork 0
gkms-localify-dmm-texture/TEXTURE_REPLACE_INTEGRATION.md

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_LoadAssetAsync Hook中添加纹理替换检测
  • AssetBundleRequest_GetResult Hook中返回替换后的纹理
  • 在初始化流程中调用 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工作流程

  1. AssetBundle_LoadAssetAsync Hook

    • 拦截Unity的资源加载请求
    • 检查资源名称是否在映射表中
    • 如果需要替换,加载本地图片文件
    • 创建Unity Texture2D对象
    • 将替换信息存储到待处理映射表中
  2. AssetBundleRequest_GetResult Hook

    • 拦截Unity获取加载结果的请求
    • 检查是否有待替换的纹理
    • 如果有,返回替换后的纹理对象
    • 否则返回原始资源
  3. 自动清理机制

    • 每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版本:

  1. 备份你的图片文件和 asset_mapping.txt
  2. asset_mapping.txt 复制到 resource/local-files/textures/
  3. 将所有图片文件按目录结构复制到 resource/local-files/textures/ 对应子目录
  4. resource/localizationConfig.json 中设置 "enableTextureReplace": true
  5. 删除游戏目录中的 xinput1_3.dll
  6. 使用新编译的 version.dll 替换原有的文件

注意事项

  1. 性能影响: 纹理替换只对配置文件中列出的资源生效,不会影响其他资源的加载性能

  2. 图片格式: 支持PNG、JPG等Unity支持的常见图片格式

  3. 路径分隔符: 在 asset_mapping.txt 中,可以使用正斜杠(/)或反斜杠(\)

  4. 日志输出: 纹理替换相关的日志会输出到控制台和日志文件中,前缀为 "TextureReplace:"

  5. 错误处理: 如果本地文件不存在或加载失败,会自动使用游戏原始资源

调试

启用调试模式查看详细日志:

{
  "enableConsole": true,
  "dbgMode": true,
  "enableTextureReplace": true
}

日志会显示:

  • 初始化过程
  • 加载的映射数量
  • 每次资源替换的详细信息
  • 错误和警告信息

常见问题

Q: 纹理没有被替换? A: 检查以下几点:

  1. enableTextureReplace 是否设置为 true
  2. asset_mapping.txt 中的资源ID是否正确
  3. 图片文件是否存在于指定路径
  4. 查看日志输出是否有错误信息

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日

技术支持

如遇到问题,请:

  1. 检查日志输出
  2. 确认配置文件格式正确
  3. 验证图片文件可以正常打开
  4. 查看游戏目录权限设置