游戏关卡设计新思路:让时间倒退

独立开发者经常一条道走到黑!所以在这篇文章中,我们将会钻研设计,希望这篇文章对你有帮助。

当开发和测试我们的游戏时,我们注意到需要很多记忆,玩家常常会忘记他们在玩关卡时,哪里做错了。事实上,我们游戏中的一些关卡是基于分散玩家注意力设计的,所以有时候你会忽视一些怪物直到你输掉的那一时刻。所以我们在考虑不同的设定从而帮助玩家记住发生了什么。显示一些过去了的敌人的拖尾或者显示玩家在先前的尝试中经常死亡的发生点。

一些担忧的地方是这样会是的屏幕很杂乱,或者玩家会一次又一次潜意识地模仿之前发生的而不是去尝试新的方法,但是这次我们不仅仅是作为开发者。在评估损失之后,我们决定按下面的方法做,当玩家按下“重新开始”按钮,我们展示他们之前是如何玩的。(从他们失败的那一刻开始,这将展示他们输掉游戏的最主要的部分。但是为了更完美的解决方案,你可能也需要看看之前发生了什么,即便是这次通关没有任何压力,它将作为一个快速回放)

实现

几乎所有反向播放的东西都是在时间轴上已经完成的了。我们依旧还不确定它是否是最佳解决方案,但是我们认为它是最简单的方案。所以运动的敌人和我们使用掉的晶体退一步变成可能。无论如何,在关卡中,其他事件会因为玩家或者玩家的动作而触发(举个例子,创造障碍)。考虑到这些,我们为TimeManager增加一个新的接口:
 

  1. public delegate void ReversingTimeActionDelegate();
  2. public class TimeManager
  3. {
  4.     class ReversingActionWithTime
  5.     {
  6.        public float Time {get; set;}
  7.        public ReversingTimeActionDelegate ActionToCarryOut {get; set;}
  8.     }
  9.     public void RememberAction(ReversingTimeActionDelegate action)
  10. }
复制代码


我们介绍ReversingActionWithTime 这个类,它记忆动作的时间和一个函数(委托),这个函数能够执行反向的动作(类似编程中的命令行模式但是与时间有关代替ctrl+Z)。

当动作发生的时候,当关卡运行时,我们仅仅添加回放函数(记忆动作)在这特别的时刻(例如:关卡的第1337毫秒),所以当我们倒回时间,它将会被调用。

举个例子,当敌人被障碍物打击并且消失的时候,我们增加这个游戏委托。然后,当“重新开始”按钮被按下并且我们及时打到这个点-委托就被TimeManager 自动调用,仅仅又一次激活敌人(所以他们出现在屏幕上):

  1. public delegate void ReversingTimeActionDelegate();
  2. public class TimeManager
  3. {
  4.     class ReversingActionWithTime
  5.     {
  6.        public float Time {get; set;}
  7.        public ReversingTimeActionDelegate ActionToCarryOut {get; set;}
  8.     }
  9.     public void RememberAction(ReversingTimeActionDelegate action)
  10. }
复制代码


在倒带模式中,我们实际上并不关心碰撞,因为他们在游戏正常运行中(之前)已经发生了。现在我们可以仅仅折返状态在一个增强的速度下忽略某些帧,我们可能需要一个配置不用那么强大的设备,因为当你倒退的时候,你可以用正常速度的20倍来播放,并且因为在关卡之后倒退回去,我们仅仅是设置对象的位置。

如果有需要,可以在委托中存储一些变量的值。举个例子,载体敌人的准确运动(黄色的那个创造一些小的敌人当它被摧毁的时候),我们需要存储它因为产生敌人的轨迹实际上是随机的。

外观和反馈

玩家实际刚兴趣的是回退的可视化部分(尤其是当涉及更多的先进的东西,比如移动轨迹和载具)除了视觉的东西,倒退也是玩家再一次看下肮脏的敌人倒下的好时候。这也给玩家一些时间没有直接参与,从而让玩家减少挫败感的形成。一个小沮丧的主题,当你成功完成了关卡,我们很粗糙地做相同的事情。我们带你进入地图(而不是打开下一个关卡)并且显示不同的动画和你取得进步的地方。(我们可能可以更深入地减轻挫败感(箭头,等等)并且清除反馈,以至于玩家不会抱怨游戏。但是我们下次再说)首先,当我们实现这个功能,我们仅仅回退时间并且游戏看起来并没有变化,但游戏性测试表明没有视觉效果在这一点上是一个非常糟糕的主意。玩家只是不理解为什么他们不能控制了(当倒退时,你不能创建连接)
 


所以,为玩家更好地意识到正在发生的倒带,我们添加了一些视觉反馈。我们使红色的敌人高亮,因为它是你需要看到的最重要的事情,并且它也形成了一个很好的视觉效果。我们还添加了倒带图标。起初,我们还尝试VHS像倒带效果,但是我们发现它不适合我们的视觉风格。这个简单的效果是通过使用灰度值,但让红色像素值超过0.7的保持不变。如果你想知道如何应用这个相机,而不只是单独的对象可以将shader赋给材质,添加这个简单的脚本添加到相机。
 

  1. using UnityEngine;
  2. public class BasicPostEffect : MonoBehaviour
  3. {
  4.     [SerializeField]
  5.     Material mat;
  6.     void OnRenderImage(RenderTexture src, RenderTexture dst)
  7.     {
  8.         Graphics.Blit(src, dst, mat);
  9.     }
  10. }
复制代码


并且拖动并且放置新的材质到相应的域中。

但回到主题。有趣的是,添加效果之后人们终于在直观的层面上知道发生了什么,别切不再挖掘创造障碍了。还有不少足够有趣的人意识到这是一个倒退的时刻只有重启后没有任何记忆,并且它之前发生。除此之外,我们还添加了一个跳过倒退的能力,它仅仅通过双击屏幕任何地方就可以了,最常见的反应是当玩家想跳过它。

其他的事情(也许我们会)可以使用本教程。在这样的游戏可以让玩家失败你试图教他一部分,然后稍微回退一点时间,请玩家再试一次。在我们看来,这个选项可以比只是重新开始整个关卡或仅仅在那个时刻停止时间更好。你可以回到这个选项如果玩家连续失败了几次,虽然。

我们还准备了一个简单的项目作为例子,我们如何实现和使用我们TimeManager的新特性,允许记住可逆操作。场景包含两个立方体,碰撞时会改变颜色。在2.5秒之后开始在相反的方向和颜色变化,由于取消的动作,我们在时间管理器中记住。

你可以在这里找到例子。

我们希望这不是难以理解,现在你有能力扭转时间。

在下一篇文章中,我们将把重点放在游戏设计时间表应用程序,它是如何帮助我们解决一些问题和完善游戏

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值