纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Unity2D项目-平台、解谜、战斗! 1.3移动组件

脸脸爱编程   2021-04-15 我要评论

各位看官老爷们这里是RuaiRuai工作室一个做单机游戏的兴趣作坊。

在这一篇中我们将会自顶向下地讨论本2D游戏中主角不可或缺的一个功能——移动控制。

首先我们简单分析一下2D游戏中主角与移动相关的需求。最主要的主角应该接受玩家WD或者左右箭头的输入以进行水平方向上的移动;应该接受玩家跳跃键的输入以进行跳跃的动作;我们暂时把这一类移动需求称为玩家控制位移。除了玩家控制位移主角还可能收到某种机关、怪物的被动位移比如击退效果、牵引效果等等这一部分我们把它称为被动位移。同时作为一个主打战斗的2D游戏技能是必不可少的部分部分技能可能也有位移效果比如冲刺技能跳跃技能有后座力的技能等等对于这一部分移动需求我们把它称为技能位移。除了移动需求与之类似的还可能有传送需求不管是主动的还是被动的。上面所说的大概就是与位置移动有关的需求。当然考虑一个游戏项目的需求是远远不够的因为我们永远无法“确定”一个游戏究竟是什么样子的我们现在所要做的就是从上面所提到的主体需求提炼出一个有效且“可扩展”的框架以便以后出现需求变更我们现有的框架能够比较容易的容纳之。

有了思路我们就应该分析一下以上几种移动需求的异同点并考虑一个实现方法。

对于玩家控制位移主角根据玩家每一帧的输入进行响应移动;对于击退、击飞等被动位移我们希望主角在一定时间内移动指定距离并在这个时间内玩家无法进行操控;对于类似风场的牵引效果我们希望能够在主角的现有位移上每帧叠加一个向心位移量;对于技能位移我们也希望主角进入和击退等状态相同的状态。

从这种角度考量主角的移动大致可以分成以帧为单位进行的以及以给定时间位移量为单位进行的两种。同时存在不同的位移状态之间存在互斥关系比如在技能位移状态下就无法进行玩家操控也无法收到来自外界的被动位移效果等等;也存在位移状态是叠加生效的比如牵引效果等。针对这种需求我们使用四个数组列表来实现目标需求:

 

其中两个互斥列表用来获得当前帧的“主要位移量”。主要位移量叠加两个叠加列表所有记录项的位移和产生当前帧的总位移。

关于主要位移量的优先选择问题我们应该存在一个优先级排序使得当多个主要位移量需求同时存在时我们可以选出一个优先级最高的位移。我们可以用一个指针列表表示:

 

除此之外时间-距离位移量还需要一个计时器来保证这个位移状态在我们想要让他失效的时候不再生效所以最后我们的主要数据结构示意图变成了这样:

 

除了主要的数据结构我们还应该定义一系列方法来操控这些数据结构但是话都说到这个份上了我们也不再往下分析了各位看官各取所需定义自己的管理方法就好~

在这个数据结构栈中我们把位移需求抽象成两种主要的实现方式:每帧进行和按时间进行对于这两种方式我们构建了若干个列表予以储存当我们需要查看当前帧主角的移动情况时我们通过找一个主要位移量并叠加若干个叠加位移量来实现。当我们的需求扩展拥有更多种类的位移需求时我们只需要扩展这些列表中的项以及扩展优先级列表即可。

到此为止我们有了一个相对完善设计和实现思路来达到我们的功能性和灵活性的需求。但是考虑这样一个情况当玩家在主角释放技能的状态下释放了另一个技能我们的程序应该如何响应?应该允许其打断当前释放的技能吗?还是让这个输入无效?或者说在一组互斥状态下我们应该如何规定当前状态允许进入哪一种状态不允许进入哪一种状态。在下一篇中我们会说明与主角状态控制有关的组件设计以及状态控制和位移控制是如何搭配对主角的移动及各种状态进行管理的。

 

 

那么今天的分享就是这些欢迎访问:

 

整个项目原型github地址:

 www.gitHub.com/yunshiyue/elementgame

 

看官有何见解有何指点欢迎留言也欢迎私聊~


相关文章

猜您喜欢

网友评论

Copyright 2020 www.Videogametimes.com 【视游时光】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式