Unity3D 您所在的位置:网站首页 unity3d怎么样 Unity3D

Unity3D

2023-11-01 04:03| 来源: 网络整理| 查看: 265

# 引言  

上次修改游戏的外部资源,算是一种特例。绝大部分游戏的游戏资源并不会这样直接“裸露在外”  

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 实验室设备网 版权所有