Unity3D | 您所在的位置:网站首页 › unity3d怎么样 › Unity3D |
# 引言 上次修改游戏的外部资源,算是一种特例。绝大部分游戏的游戏资源并不会这样直接“裸露在外” u3d的游戏资源保存在`.asset` 文件中,游戏代码则主要在 `Assembly-CSharp.dll`中(复读) 此处假定你已经阅读了前文,并且下载好了工具,明白了制作MOD的基本思路与流程 ## 关于游戏中的图片 对于游戏的图片的内容,除非程序员特地设计,它几乎百分百只存在于游戏资源之中 为什么说几乎只百分百只存在于游戏资源中? 因为使用其他方式保存大多会影响游戏的加载速度,或者造成游戏程序代码编写的不方便 这么说,还能将图片保存到游戏程序中? 是的,可以。 对于过分简单的图片(比如一张纯色的图),是可以使用代码来保存的,而且在获取的效率上甚至比保存在游戏资源中更快。但对于复杂的图片,保存在代码中就会比较的麻烦(如 BASE64 ),速度上也不见得会快 这是不是意味着可能找不到那些过分简单的图片? 但实际上,如果没有这样的需求,几乎没人会特地这么做。 还记得前面篇章中写过的吗?程序员(乃至于普通人)将文件按照其层级意义进行分类存放 所以哪怕是一张 用代码生成 比 保存到资源文件 中读取要快100倍的图片,程序员都会倾向于将它保存到资源文件中 在游戏中,图片的作用多种多样 有的可能是一张人物立绘或者游戏CG,有的可能是游戏菜单上的一个按钮,有的可能是某个模型的贴图 在这里,我会根据图片特点,将图片分为三个种类 * 静态图片 指那些图片本身看起来是怎么样,在游戏里看到就是怎么样的图片,典型的是游戏CG图 * 可动图片 指那些可以通过对图片进行形变/位移/叠加之类的操作达到一定表现效果的图片。典型的例子是Live2D 的人物 * 模型贴图 指那些用于保存模型材质信息的贴图 # 确定基本MOD制作思路(复读) 1. 找一位 没有加密资源的 U3D制作的 幸运儿游戏 2. 大致观察其内容 3. 进入游戏,确认目标 4. 搜索目标所在 5. 对目标内容进行修改 6. 保存修改后的内容到游戏中 7. 重启游戏,观察是否修改成功 # 操作 ## 寻找幸运儿游戏 关于如何寻找U3D游戏,见 [Unity3D-游戏-通用MOD制作方法-修改游戏资源-文本] 这次我选择的游戏是:霓虹深渊 (来自老菊玩啥我玩啥系列) ## 大致观察内容 进入游戏的过程中并没有发现有U3D的广告图 进入游戏根目录 观察到有 Unity 字样,但并不能确认什么 在游戏找到`.assets`文件,那么基本确认是U3D制作的游戏了 ## 确认目标 这次的话,我选择替换这个任务的立绘好了 ## 搜索目标所在 ### 搜索方法 此处使用对于已经打包好的U3D游戏资源文件`.assets`使用`AssetStudio`这个软件来进行浏览和搜索目标资源 在观察目录的时候,就发现了有好几个`.assets`文件 目标在哪个`.assets`文件里呢? 每个游戏各有不同,没有人能回答你,你只能自己寻找 对于那些已经有人制作过 MOD的游戏,是可以询问得知的。而且那些作者已经理解了 游戏程序员的资源存放思路 了 对于没人只做过MOD的游戏,那就只有问优秀作者,或者自己慢慢摸索了 快速寻找的捷径? 捷径是有的,依然是那个理论 “程序员(乃至于普通人)将文件按照其层级意义进行分类存放” 由于这个原因,大多数游戏资源会集中放置于 某个 或 某几个 `.assets`文件中,而不会单独的分开存放。这会让这些文件有一个特征一一体积大 所以只要加载那些体积大的`.assets`文件,一般都能找到目标图片 `AssetStudio`是支持同时加载多个`.assets`文件的,但同时读取多个会占用跟多的系统资源,加载速度也会变慢 在加载完毕后,点击 `Asset list`查看资源 可以查看到加载的资源包中的内容 由于是要修改图片,所以需要留意的是 `Texture2D`和`Sprite` 这两种图片格式的资源 Texture2D 与 Sprite Texture2D 是真正的图片。而Sprite则是一些序列记录,并非是图片本身。 Sprite? 2D动画是由一帧帧图片不断快速切换实现的 它们可以单张图片分来存储,也可以合并成一张存储 当合并成一张图片来存储的时候,想要从一张图片中获取指定的内容,就需要一些切割信息记录,来标注需要的内容的位置 比如,我现在需要游戏准头的贴图。它并不单独保存到一张图片中,而是和其他的游戏内容一起保存在一张贴图(Texture2D) 准头Sprite记录就是为了能够在这张图片上找到准头的图片资源而存在的(比如说记录准头位于这张图片,左上角坐标(x1, y2),右下角坐标(x2, y2)所组成的矩形区域中) 在给出坐标信息后,程序就能将图片进行“切割”,单独地将准头图片资源拿出来使用了 可以通过设置过滤器,使得软件只显示指定格式的资源 余下的就是真正的进行搜索了 在游戏里,我看到我想要修改的角色名字叫`安娜`,那么对应的英文应该是`Anna` 于是就直接进行搜索 你怎么知道就是`Anna`? 这是英语的习惯,很多人名都是有固定的拼写的 比如 卢卡斯 对应 `Lucas`, 本 对应 Ben 这种东西应该找英语老师,而不是找我 其它词语? 还记得前些篇目说的要诀吗? “关键是摸清程序员的思路” 想想这次的目标,也就是游戏操作的角色,都有什么可能的名词描述呢? hero(英雄),character(角色),player(玩家)...... 其实都可以试试进行搜索,但一般程序员都会用名字来对游戏资源进行命名,因为这个命名是唯一的(没有第二样东西叫Anna.所以找Anna就只能是这个Anna) 在搜索到`Texture2D`的时候就已经看到有目标的资源了,证明想法没有错,但是没找到目标 增加了`Sprite`类型后,就找到了目标 这个`PathID`需要记录 `Sprite`并非是图片本身 需要通过这个`Sprite`记录找到它所使用的图片`Texture2D` 查看目标所在的`.assets`文件 如此一来,就知道了资源的`PathID`信息和所在的`.assets`文件信息 查看`sprite`记录来得知所需要的图片 这里会用到 `AssetBundleExtractor`这个软件 利用这个软件打开`Sprite`所在的`.assets`文件进行查看 利用在前面找到的`PathID`记录,对资源进行查找,找到目标`Sprite` 查看`Sprite`记录,找到其使用的图片的信息。这里是`UI_character_choose` 利用这个信息,重新在`AssetStudio`中查找。找到目标图片 类似的,记录图片的`PathID`, 在`AssetBundleExtractor`中导出图片 ## 对目标进行修改 导出的图片可以用PS来进行修改 由于本身并不会画画,这里我会稍微利用一下油管像素画大佬的资源 一顿操作(修改被选中时的图像,未被选中时的图像......)过后,按原本导出的格式保存到本地 (PSD源文件建议备份) ## 保存修改后的内容到游戏 首先备份你即将修改的游戏原本的`.assets`文件 用`AssetBundleExtractor`进行修改。用修改过的图片替换原来的图片 保存修改后的`assets`(这个软件无法做到读与写同一个文件,所以先保存到别处) 关闭`AssetBundleExtractor`,用修改后的`.assets`文件替换原本的`.assets`文件 ## 重启游戏,观察是否修改成功 看着还行 以后再弄点其它的看看 |
CopyRight 2018-2019 实验室设备网 版权所有 |