Unity游戏去除马赛克插件
柠萌丶不酸
2025年07月12日 16:01
收录于文集
共2篇

通过使用BepInEx6.0框架加载插件去除unity游戏中马赛克。之前在谈论过unity游戏去除mosaic方法​,由于unity版本出来了mono和IL2CPP平台,加载马赛克的方式也不同。如果使用之前的插件 UniversalUnityDemosaics不能去除马赛克,可以使用另一个插件unityDemosaic去除马赛克。下面说说常见的Unity游戏的加载马赛克的方式。

1. 加载方式

1. 游戏对象 (GameObject)

2. 材质 (Material)

3. 着色器 (Shader)

4. 着色器属性(Shader Property)

5. 网格 (Mesh)

6. 纹理 (Texture)

7. 组件 (Component)

8. 函数方法名(Assembly-CSharp)


知道了马赛克加载方式,就可以从关键词匹配去场景中阻止渲染器的马赛克生成。比如常见的删除网格 (Mesh) ,修改着色器属性数值_BlockSize为0。之前的传统方法就是使用AssetStudio和UABEA查看和编辑。如查看关键词mosaic,censorb,然后根据PathID,pidID修改指定的内容。但是不同环境的Unity版本可能存在解包错误和编辑错误的不兼容问题,特别通过data.unity3d打包的游戏,解包很麻烦。使用BepInEx加载插件直接省略这一个步骤。

BepInEx插件的工作原理就是实现扫描检测游戏的场景加载,通过关键词匹配去禁用相关资源。如果游戏中没有移除马赛克,请使用AssetStudio或者AssetRipper解包软件查看相关名字,需要使用不同的关键词搜索查看是否存在,这里不全部列出了,然后参数上面的加载方法,在配置demosaic.cfg相关方式里面添加关键词,一般默认的关键词已经足够。如果还有不能去除马赛克,可以使用传统UABE修改资源方法,或者参考下面特定方法禁用的方法

特定方法禁用

此方法比较比较复杂,需要重新编译插件,但效果最好,IL2CPP平台属性动态加载,在BepInEx插件interop文件找到Assembly-CSharp.dll然后使用dnSpy查看相关控制马赛克方法,需要知道类名和方法。如类名MosaicController,方法Update。找到[HarmonyPatch]这段代码,替换.GetType.GetMethod的内容,重新编译。


2.使用方式

1.确认游戏平台是mono还是IL2CPP。如果目录有GameAssembly.dll或者il2cpp_data文件夹是IL2CPP平台,没有即为mono平台,即使普通的unity游戏版本。

2.将相应平台的BepInEx框架复制到游戏目录上,运行游戏,有控制台显示证明成功加载框架。

3.mono平台使用Demosaic-Mono.dllIL2CPP平台使用Demosaic-IL2CPP.dll

复制插件到BepInEx/plugins文件夹中,运行游戏,插件会自动在 BepInEx/config/ 目录下生成一个名为 demosaic.cfg 的配置文件。

4.如果没有去除mosaic,请手动按F10强制加载一次,查看控制台输出日志,是否有启用和禁用成功。详细配置请参考 demosaic.cfg 的配置文件。

5.没有去除马赛克原因,1.游戏图片资源中有马赛克。2.游戏马赛克关键词不匹配。3.游戏使用更高级的方法控制马赛克,尝试使用特定方法禁用。4.游戏加载马赛克的逻辑比较特殊,这个插件适合。

插件下载:https://github.com/Eikanya/UnityDemosaic/releases

bepinex下载:https://builds.bepinex.dev/projects/bepinex_be


    插件只是提供一个思路,不一定适合所有unity游戏。