摘要:打开AssetStudioGUI,打开File --> Load File,选择你要修改的后缀名.unity3d文件。加载好后点击Asset List,再打开Filter Type,只勾选Texture2D。
(该文章仅适用于使用 Unity Web Player 插件运行的 .unity3d 后缀名游戏文件的汉化。)
使用到的工具:
AssetsBundleExtractor V2.2
AssetsBundleExtractor V3.0
dnSpy V6.1.8.0
UnityEX V1.9.0
AssetStudioGUI V0.16.47
一、替换图片
打开AssetStudioGUI,打开File --> Load File,选择你要修改的后缀名.unity3d文件。加载好后点击Asset List,再打开Filter Type,只勾选Texture2D。
此时在Asset List下显示的所有资源都是游戏的图片。找到你要修改的图片,并记住它的PathID。
打开AssetsBundleExtractor V3.0,点击左上角 文件 --> 打开,选择你要修改的.unity3d文件。
加载完成后,找到名字和PathID都相同的图片,选中后点击插件,选择Export to .png。
将图片导出后,进行修改,然后点击插件,选择Edit,点击载入,选择修改好的图片,最后点击好的,修改好的图片就导入成功了。
将修改好图片的导入后,点击文件 --> 应用并保存全部。
此时的游戏是无法直接运行的,打开AssetsBundleExtractor V2.2,点击左上角 文件 --> 压缩。选择前面保存下来的.unity3d-mod文件进行压缩,压缩后的文件就是可以运行的文件了。
附上修改前后的对比。
关于如何在本地运行.unity3d后缀名的游戏,请翻到最底下。
二、替换文本
打开AssetStudioGUI,打开File --> Load File,选择你要修改的后缀名.unity3d文件。加载好后点击Asset List,再打开Filter Type,MonoBehaviour和TextAsset,找到要修改的的文本。
根据PathID,在AssetsBundleExtractor V3.0里找到对应的文本(可能在任何一个Assets里)
。
如果文本在TextAsset里:
将文本选中,导出转储,导出为json文件,用编辑器(由于Windows自带的记事本会自作主张的在文件的添加不需要的字符,因此不能使用记事本来编辑。如果在安装过程中报错,请更换编辑器。)打开后修改。
回到AssetsBundleExtractor V3.0,选择导入转储,文件类型改为json文件,导入修改好的文本。
导入后应用并保存全部,压缩。
如果文本在MonoBehaviour里:
记住文本所在的Assets名,将其导出。
使用UnityEX打开刚刚导出的文件。
根据PathID找到文本并导出。
导出的文件将保存在同目录的Unity_assets_Files文件夹里。
使用DnSpy打开导出的文本文件,右键界面,打开十六进制编辑器。
选中文本部分的第一个字符,输入你要替换进去的文本,将剩余不需要的部分用空格替换。对文本由于修改十六进制数据容易导致文件损坏,使用时应做好备份。
仅能修改已有文本的位置,不能超出原文本范围,否则文件损坏。
由于修改十六进制数据的局限性,文本的十六进制数据长度无法更改。
修改完成之后保存,通过UnityEX将修改好的文本导回Assets文件中。
(只要文件位置没有更改,点击后读条完即导入成功。)
通过AssetsBundleExtractor V3.0将Assets文件导入。
导入后应用并保存全部,压缩。
启动之后可以看到,文本已经修改成功了。
文本在 .dll 文件里:
如果在MonoBehaviour和TextAsset都没有找到想要修改的文本,那文本可能在.dll文件里。
以Assembly-CSharp.dl为例。
将Assembly-CSharp.dll导出,使用Dnspy打开,通过搜索程序集功能搜索文本关键词。
可以看到对应的文本,但是由于通过AssetsBundleExtractor将Assembly-CSharp.dll导入.unity3d文件中,会导致.unity3d文件损坏。因此我们只能通过别的方式来修改。
使用AssetsBundleExtractor V3.0打开.unity3d文件时,会先将文件解压缩。
在选择的文件夹里会出现一个同名的.unity3d-decompressed文件,这个文件就是解压缩后的文件。使用Dnspy打开它,然后打开16进制编辑器。
我们可以在16进制数据里找到原来的文本。这里可以使用查找功能。
首先将要查找的文本转为16进制Unicode编码,在16进制编辑器界面按下Ctrl+F,即可换出查找栏,将16进制Unicode编码复制进去。
(此处16进制数据的意思是Rat King)
将要替换进去的文本复制,选中被替换文本16进制数据的第一个字符(不要选错了)。
选中后右键粘贴->粘贴(Unicode)。
可以看到这里已经替换掉了Rat以及一个空格,接着我们将King用空格替换掉。
选中右边文本t King的第一个字符t,选中后按空格键,可以看到t已经被替换成了空格。
接着选择第二个字符K,按下空格,以此类推。
将不需要的字符都替换成空格后,保存文件,使用AssetsBundleExtractor V2.2压缩后打开。
可以看到文本已经修改成功。
三、替换字体
打开AssetStudioGUI,打开File --> Load File,选择你要修改的后缀名.unity3d文件。加载好后点击Asset List,再打开Filter Type,只勾选Font,找到要替换的字体。
根据PathID,在AssetsBundleExtractor V3.0里找到对应的字体(可能在任何一个Assets里)
记住字体所在的Assets名,将其导出。
使用UnityEX打开导出的Assets文件,找到字体,导出,将要替入的字体文件名改成与导出的文件一直,复制到同一目录,选择替换。
替换后通过UnityEX将修改好的字体导回Assets文件中。
使用AssetsBundleExtractor V3.0将Assets文件导回.unity3d文件中。
导入后应用并保存全部,压缩。(懒得上图了,上面文本的图就是修改过字体的)
附:在本地运行后缀名.unity3d的游戏。
html, body {
margin: 0;
padding: 0;
}
新建文本文档,将后缀名改为.html,将以上文本复制进去。其中width: 和height: 后面是界面的高度和宽度,可根据情况修改。
将“修改图片字体后修改文本.unity3d”修改为你游戏的文件名。
将.unity3d文件和.html文件放在同一个目录下,使用浏览器启动.html文件。
完
来源:有钱真的很酷