引言
各位同学大家好。在今天的分享当中,我将对任务系统去做一个拆解。也许你见过很多任务系统,但是今天我要分享的是我们经过一个框架迭代以后的任务系统。我会结合客户端的功能演示给大家去讲解。
跟着演示学开发
基本操作
好,首先我们点击启动,我们这个项目是一个联网项目,服务器已经启动好了。现在我们先去点击加载我们的热更程序集,按照老规矩输入一下账户名ymck.top,这个也是我们的官网地址,密码666。好,现在我们来注册一下,注册成功。
那现在的话我们点登录。好,我们选择荧这个角色。好,进入到这个加载地图的界面,稍等一下。
好,进入地图以后,现在我们就去找我们的NPC去对话。
我们先来看一下逻辑功能实现,然后再去深入去分析这个框架、架构层面的一些我们所实现的功能。
大家看这是第一个NPC瑶瑶,这个是第2个NPC,我们的妮露。
学习任务系统细节
现在我点击这个NPC,这时会弹出一个可以和NPC交互的菜单,现在我们可以看到这个NPC有很多的任务。
此时大家可以看到,我们整个项目的UI界面和逻辑都是仿照原神的界面去做的。
现在我们点击“初入江湖”,去接这个任务。
大家注意,如果是接任务的话,那么它这个地方这个图标是一个感叹号,这表示这个任务是可以接的。
好,那么我们接一下,接下来以后,然后我们可以到我们的这个任务面板里面可以看到,我们接的任务叫初入江湖。他的任务的描述我们仔细看一下,他的要求是从我这里带两串我家祖传的果香烤串这个手艺带给妮露尝尝。
然后这个任务,现在我们是已经接了,因为这个任务没有什么前置条件,所以说你可以直接去提交。
现在我们点离开,这个时候我们可以看一下我们的背包,背包里面是没有任何的实物的,背包当前没有任何物品。
现在我去交任务,大家注意交任务的按钮是一个问号,这个都是一些细节,这个细节特别磨人。我们的项目里面把这些细节全部都还原了。
点初入江湖。
好,然后我们再到我们的任务面板就可以看到这个任务已经是一个完成的状态了。
带两串烤串给妮露已经完成了。
这个时候我们可以看到是要带两串烤串。在我的设定里面,我是配置了完成任务只送一串烤串和摩拉,第二串要玩家用获得的摩拉去购买。(“任务数据配置”见下文)
所以,我们再去找这个NPC,再去买一串。在这里我们点击“这里卖什么”,打开NPC商店,这个也是我们过往所实现的一个系统,叫做“商店系统”。
打开NPC商店,可以找到各种各样的食物,果香烤串2块钱,现在我们有510块钱
买一个,现在你还有508,然后离开。
离开以后,然后我们再看一下我们的背包,现在你就有两串烤串了!
提示:在传统的MMORPG架构中,背包里面的物品同步、任务同步,都需要定义专门的网络协议来进行客户端和服务器的通信处理。
但是,我们的原神项目的任务系统就做了一个迭代。
经过迭代,所有这些客户端跟服务器之间的数据同步都是自动进行的!
具体来说,就是我们的服务器的NPC实体所拥有的任务、玩家已接的任务,这些服务器实体所拥有的属性是自动同步到客户端的。
这个同步体现在两个方面:
一是:服务器到客户端,这个同步是自动化的!
二是:从客户端数据层到UI层,这个同步是也自动化的!
目前市面上即使是一些较新的开源框架,也只做到了第一层的同步,而我们的框架是全自动同步的!
而且,在这里我们全流程没有依赖任何的一个开源框架,或者是第三方组件,全都是我手把手带着大家去把它实现出来的。所以大家也可以通过我们的这个框架学到如何从零到一把这个框架开发出来,并基于此实现各种业务逻辑。
这对大家不管是在实际工作中、还是在笔试面试都会有很大帮助。
因为,你所拥有的这些东西全都是你自己掌握的,而不是像使用第三方的一些框架或者是开源的源码一样——你只是会用!
一旦工作中,需求发生任何一点变化,在你不理解的情况下,是很难合理的重构的,大家认为呢?可以在评论区说说你的观点~
雷蒙德 00:05:59
我们接着往下看。好,这个的话就是我们的刚才已经完成了这个初入江湖的任务,现在我再接一个打工赚钱。但是现在的话在这个初入江湖的时候,瑶瑶给了我一串烤串,我自己买了一串对吧?
那这个前置任务我都完成了,完成了以后,我们就可以再找瑶瑶接一个“打工赚钱”任务。
大家注意:这里有一个任务逻辑很重要:在前置任务没有完成的时候,NPC是不能显示后续任务的;或者说玩家前置任务完成后,NPC任务列表中的前置任务要隐藏!
这个逻辑我们也都实现了,并且是以一种高效、优雅的方式(参考上面提及的我们的框架)
这个任务是什么呢?我们看一下这个任务是把刚才瑶瑶给我们玩家的口香烤串带给妮露,为了表示感谢,那么NPC在我们完成这个任务以后,瑶瑶会给我20个摩拉作为回报。
好,那么现在我们就去把这个任务去完成一下。大家可以看到这个地方还有一个细节,就是我们的这个任务的进度也给他以已经完全给他做进去了。就是这个任务是可教的,因为你这个任务是需要给瑶瑶带两串烤串。现在我当前的任务进度就是我已经有了两串了。
那现在的话我就可以直接找一路把这个烤串带给他去交任务所以我现在到一路这儿翻过来,现在我们选择打工赚钱。
好,那这样的话我就把任务给交掉了,交掉了。那这边的话显示这个任务状态是已经完成的。
那这个就是我们的完整的、基于联网状态下的任务系统。
跟着思维导图深入理解
好,那么现在我们再回到我们的思维导图来看一下
任务系统的用途
首先,任务系统究竟有什么用呢?
任务系统在我们的游戏世界当中,主要是帮助我们去获取道具、武器或者是金币。
在游戏中,你需要获取消耗品,但是无尽的获取消耗品会使游戏的经济系统出现通货膨胀(就像现实世界中一样)!
因此,你也要有消耗品被消耗的地方。
就比如说:
- 武器的耐久度可以被消耗
- 金币也可以被消耗
- 道具也可以被消耗
所以,任务系统是获取消耗品,而游戏中还会有一些系统负责消耗它!
任务系统的数据配置
好,接着的话我们来看一下任务系统是如何去进行数据配置的。
在商业项目开发当中,任务系统数据都不是直接在unity里面去配置的,也不是在代码里面把数据给写死掉。
而是通过专门的数据配置表来进行配置的。
好,大家可以看一下这个就是我们的一个策划使用的数据配置表。
那一些细节的话,我们等下结合我们的思维导图具体看一下。
这张数据配置表,最终在我们的实际项目里面是会通过程序的方式,把这个excel表格转换成程序能使用的数据。
这些我都会在我的项目里面教给大家。
我们来看一下具体有哪些数据要配置?这里内容是非常多的,会涉及到NPC任务。那么我们来看一看:
首先,在你的NPC表里面,你首先需要记录这个NPC能够接哪些任务,能够交哪些任务,如下图所示:
其次,你的任务表里面要去记录任务的详细信息,包括:
- 任务的ID号
- 任务的名称
- 要做这个任务至少需要玩家有多少等级
- 每个任务的前置任务
- 获得的摩拉奖励
- 获得的经验奖励
- 获得的物品奖励
这些我们都需要配置,如下图所示:
大家知道商业项目里面特别是MMO类型的游戏,它的数据配置很多,如果不做任何优化的话,它加载的速度会比较慢。
所以,在这里我们都已经做过一些相应的优化处理了,是采用了一套最优的商业项目方案,并且因为是自研的,你可以任意魔改它,来实现你自己的拓展需求,具体的原理,项目里有详解。
具体我们的任务又可以分成:
- 跑图任务
- 杀怪任务
- 采集任务
- 当然,在你掌握以后,你还可以继续拓展……
这里的每一种任务,它的数据也是需要配置的。
大家可以想一想,各种类型的任务该如何配置,评论区留言讨论~
实体定义
进一步的每一个玩家它应该包括他已经接取的任务列表
这个地方它的数据结构设计和逻辑实现就比较复杂了
比如说:
- 这个玩家当前已接的任务有哪些?
- 哪些任务是可以交的,这个逻辑判定应该怎么做对吧?
- 哪些任务是可以接的:
-
- 要判断我的前置任务是什么
- 是否已接
- ……
- 类似这样的细节逻辑是非常多的……
好,然后具体的业务逻辑实现,我会在我的项目里面去教给大家。
参考
今天的分享的话就到这里,大家如果有兴趣的话,可以加alice17173学习更多游戏开发技能。
优梦创客——创作一款大家爱玩的游戏!