Unity基础教程系列(七)——可配置形状(Variety of Randomness)

目录

1 形状旋转

1.1 添加旋转

1.2 随机旋转

1.3 保存角速度

1.4 一次性更新所有形状

2 形状运动

2.1 增加速度

2.2 保存速度

2.3 随机化速度

2.4 逐个生成区域的速度

2.5 相对速度

3 逐个生成区域的配置

3.1 移动方向

3.2 向外运动

3.3 随机运动

3.4 速度范围

3.5 隔离配置

3.6 重写符合区域

4 高级配置

4.1 角速度和缩放

4.2 Custom Property Drawer

4.3 配置颜色

4.4 范围滑动条

4.5 滑块值

本文重点:

1、让形状旋转和移动

2、集中控制游戏Update

3、每个生成区域可配置化

4、提高检视面板便捷度

这是有关 对象管理 的系列教程中的第七篇。它为形状增加了一些行为,并可以针对每个生成区域配置它们。

本教程是CatLikeCoding系列的一部分,原文地址见文章底部。原创标识仅表示原创翻译。如果因此导致其他人翻译不便之处可以联系本人开白,不显示来源。

本教程使用Unity 2017.4.12f1制作。

(每个生成区域都在做自己的事情)

1 形状旋转

我们可以创造出外观各异的形状,但它们只是原地不动,直到被销毁。现在让他们做点事情来增添趣味性。比如,让所有的形状旋转起来。

1.1 添加旋转

使对象旋转的最直接方法是调用其Transform组件的Rotate方法,就像我们对RotatingObject所做的那样。这个时候,我们需要向Shape添加一个FixedUpdate方法并调用它。首先先使用对象的本地的 forward 方向作为其旋转轴。

(旋转形状)

默认的时间步长是0.02,这意味着FixedUpdate每秒被调用50次。因此,我们最终得到了每秒旋转50°的形状。但是,通过将forward 矢量乘以50,再乘以时间增量,可以使转速明确。并且这会让旋转与时间步长无关。

1.2 随机旋转

下一步是给每个形状一个随机的角速度。添加一个公共AngularVelocity属性,使其可以进行配置,然后使用该属性来确定每次Update的旋转程度。

现在,游戏必须在CreateShape中设置形状的角速度。我们可以使用Random.onUnitSphere获取随机旋转轴。将其乘以50,所以我们再次以每秒50°的旋转结束。

(随机角速度)

为了使旋转速度也随机化,请将50替换为随机范围,例如每秒0到90度之间。

1.3 保存角速度

此时,我们还没有保存角速度。加载游戏还是会得到具有任意角速度的形状,因为回收的形状会保持其原有速度。因为保存角速度需要更改文件格式,所以请将保存版本增加到4。

在形状的颜色之后写下角速度。

保存的版本足够高时,还要加载时读取角速度。保存较早的游戏因为没有角速度,请使用零向量。

1.4 一次性更新所有形状

在添加形状旋转功能之前,我们不需要更新形状。但是现在,Unity必须调用所有活动形状的FixedUpdate方法。虽然常规方法调用并不会造成实际问题,但是FixedUpdate和其他特殊的Unity方法需要额外的开销,这可能会使对象变慢。当只有几个活动形状时,这不是问题,但是在处理许多形状时可能会成为性能瓶颈。

(Profiler 展示1000个独立的FixedUpdate调用)

与其将形状更新的责任留给Unity,不如我们自己进行管理。游戏已经包含所有活动形状的列表,正好可以用来更新它们。但是我们不能使用FixedUpdate,因为不管如何,Unity都会调用同名方法,所以必须将其重命名为其他名称。这里我们修改为GameUpdate,并将其公开,以便Game可以访问它。

在Game的FixedUpdate方法中,遍历形状列表并调用每个形状的新GameUpdate。在生成新形状之前,一开始就执行此操作。这样可以使行为与我们游戏的早期版本保持一致。

(所有的Update都统一起来了)

这种优化真的值得吗?

当你处理成千上万个相似的对象时,它们都需要更新,而你自己也已经对其进行了跟踪,那么这样做是值得的。你需要去了解性能会消耗多少,因为它随目标平台的不同而不同。优化在编辑器下可以获得最大收益。请注意,如果你发现自己正处于这种情况下时,可以关注下Unity 2018中引入的实体组件系统(ECS)是否更合适也是一个好主意,但本教程不会对此进行介绍。

2 形状运动

现在,我们的形状可以旋转了,但它们仍保留在它们产生的位置。让我们通过给每个形状一个随机的速度来改变它。

2.1 增加速度

就像我们做角速度一样,也给形状一个速度属性。

每个Update中,将速度乘以时间增量设置到形状的位置。我们可以使用局部位置而不是更昂贵的position属性,因为形状始终是根对象。

2.2 保存速度

保存速度,直接在角速度之后写入速度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值