Unity基础教程系列——对象管理(一) 持久化对象(Creating, Saving, and Loading)...

目录

1 按需创建对象

1.1 游戏逻辑

1.2 玩家输入

1.3 随机立方体

1.4 开始新游戏

1.5 保持对物体的追踪

1.6 清空列表

2 保存和加载

2.1 保存路径

2.2 打开文件以便写入

2.3 关闭文件

2.4 写数据

2.5 加载数据

3 抽象存储

3.1 游戏数据的读取器和写入器

3.2 持久化对象

3.3 持久化存储

3.4 可持久化游戏

3.5 重写方法

本文重点:

1、按下按键的时候随机产生一个立方体

2、使用泛型和虚函数

3、把数据写进文件再读取出来

4、保存游戏状态之后再加载回来

5、封装数据持久化的细节

这是有关 对象管理 系列教程中的第一篇。它涵盖了创建,跟踪,保存和加载简单的预制实例。它基于“基础知识”部分中的教程奠定的基础。

本教程是CatLikeCoding系列的一部分,原文地址见文章底部。“原创”标识意为原创翻译而非原创教程。

本教程使用Unity 2017.3.1p4制作。

(这些立方体在游戏结束后可以留存下来)

1 按需创建对象

你可以在Unity编辑器中创建场景,并用对象实例填充它们。它允许你为你的游戏设计固定的关卡。这些对象可以绑定一些行为,比如在Play模式下修改场景的状态。通常,在游戏过程中都会创建新的对象实例。例如子弹被发射,敌人生成,随机战利品出现等等。玩家甚至可以在游戏中创建一些自定义关卡。

在游戏中创造新物体是一回事。但玩家退出游戏,然后再回到游戏中又是另外一回事。记住,Unity不会自动为我们记录过程当中进行的变化。我们必须自己去做。

在本教程中,我们会创建一个非常简单的游戏。它所做的一切就是在按下一个键时生成一个随机立方体。只要我们能够跟踪不同游戏会话(sessions)之间的立方体,就可以在以后的教程中增加游戏的复杂性。

1.1 游戏逻辑

因为我们的游戏非常简单,所以我们将只使用一个Game组件脚本来控制它。它会根据我们的预制体生成立方体。所以它需要包含一个公共字段来连接一个预置实例。

在场景中添加一个游戏对象,并将此组件附加到上面。然后再创建一个默认的立方体,把它转化成一个预置,并给游戏对象一个它的引用。

1.2 玩家输入

我们会根据玩家的输入来生成立方体,所以游戏必须能够检测到这一点。可以使用Unity的输入系统来检测按键。但哪个键应该被用来产生一个立方体呢?暂定就用C键吧,除此之外,我们还可以通过检查器来配置它,通过在Game中添加一个公共KeyCode枚举字段来实现。当使用赋值来定义字段的时候,使用C作为默认选项。

(创建一个key 设置为C)

我们可以通过在Update方法中查询静态输入类来检测键是否被按下。Input.GetKeyDown方法返回一个布尔值,该值告诉我们当前帧中是否按下了某个特定的键。如果是这样,我们必须实例化预置。

什么时候Input.GetKeyDown返回true?

它只在key的状态从未按下到按的帧里才会返回true,因为玩家按了键。通常情况下,按键会在几个帧内保持按下状态,直到玩家放开按键,但Input.GetKeyDown只在第一帧中返回true。相比之下,Input.GetKey在键被按下的每一帧都返回true。还有Input.GetKeyUp,它在玩家放开键的帧中返回true。

1.3 随机立方体

在游戏模式下,每次按C键或配置为响应的任意键,我们的游戏都会生成一个立方体。但是看起来我们只能得到一个立方体,这是因为它们最终都位于同一位置。因此,让我们随机化创建的每一个立方体的位置。

跟踪实例化的Transform组件,以便我们可以更改其本地位置。使用静态Random.insideUnitSphere属性获取随机点,将其缩放至5个单位的半径,然后将其用作最终位置。因为这不仅仅是实例化一个对象,所以将其代码放在单独的CreateObject方法中,并在按下键时调用它。

(随机放置立方体)

现在,立方体在一个球体内部生成,而不是在完全相同的位置生成。它们仍然可能重叠,这无关紧要。但是,它们都是对齐的,看起来不是很有意思。因此,让我们给每个立方体一个随机旋转值,可以直接使用它的静态Random.rotation属性。

(随机旋转)

最后,我们还可以更改立方体的大小。我们将使用均匀缩放的立方体,因此它们始终是完美的立方体,只是大小不同。静态Random.Range方法可用于获取一定范围内的随机浮点数。我们使用从小尺寸的0.1立方到常规尺寸的1立方。要将此值用于比例尺的所有三个维度,只需将Vector3.one与之相乘,然后将结果分配给local scale即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值