【二次元MMORPG游戏开发】任务系统技术拆解

引言

各位同学大家好。在今天的分享当中,我将对任务系统去做一个拆解。也许你见过很多任务系统,但是今天我要分享的是我们经过一个框架迭代以后的任务系统。我会结合客户端的功能演示给大家去讲解。

跟着演示学开发

基本操作

好,首先我们点击启动,我们这个项目是一个联网项目,服务器已经启动好了。现在我们先去点击加载我们的热更程序集,按照老规矩输入一下账户名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学习更多游戏开发技能。

优梦创客——创作一款大家爱玩的游戏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608818.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int n nums.size();if (n < 2) {return n;}int slow 2, fast 2;while (fast < n) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slo…

【Linux】项目自动化构建工具make/makefile

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中项目自动化构建工具make/makefile的相关内容。 如果看到最后…

[windows系统安装/重装系统][step-2]BIOS设置UEFI引导、磁盘分区GPT分区、安装系统[含完整操作拍照图片]

背景 先准备U盘启动盘和系统镜像: [windows系统安装/重装系统][step-1]U盘启动盘制作&#xff0c;微软官方纯净系统镜像下载 前言&#xff08;略长&#xff0c;建议可跳过&#xff09; 我的笔记本升级了CPU升级了内存后出现了一个小问题&#xff0c; 每次启动徽标显示后会…

hyper-v启动centos7虚拟机不能联网

虚拟网卡要和之前虚拟机里面设置的GATEWAY一致。 安装CentOS遇到Error setting up base repository换url 或者换镜像包iso(这个有用&#xff09; 没掌握摸Yu的精髓 好累啊

安全加固

目录 1.文件锁定管理 2.设置用户账户有效期 3.查看并清除命令历史记录 4.设置用户超时登出时间 5.用户切换 6.用户提权 7.禁用重启热键CtrlAltDel 8.设置单用户模式密码 9.调整BIOS引导设置 10.禁止root用户从本地登录&#xff1a; 11.禁止root用户通过ss…

【算法刨析】完全背包

完全背包与01背包的区别 01背包对于一个物品只能选择一次&#xff0c;但是完全背包可以选择任意次&#xff1b; 思路 和01背包类似&#xff0c;01背包我们只需要判断选或不选&#xff0c;完全背包也是如此&#xff0c;不同的是&#xff0c;对于这个物品我们在判断选后在增加一…

【考试100】2023年监理《目标控制(土建)》真题及答案精选

​来源&#xff1a;考试100 一、单项选择题 1、工程建设与使用中&#xff0c;保证人身和环境免受危害&#xff0c;是建设工程质量特性中的&#xff08; &#xff09;要求。A .适用性 B .耐久性 C .安全性 D .可靠性 参考答案&#xff1a;C 解析&#xff1a;安全性&…

2024 全自动ai生成视频MoneyPrinterTurbo源码

只需提供一个视频 主题 或 关键词 &#xff0c;就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐&#xff0c;然后合成一个高清的短视频。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89208288 更多资源下载&#xff1a;关注我。

AGV与智能仓储系统集成的实践与优化

agv 根据相关研究报告指出&#xff0c;储存、装卸、等待及运送等程序&#xff0c;几乎占了整个生产制程95%的时间&#xff0c;因此导致工厂中的再制品及物料无法有效降低&#xff0c;耗损大量人工等问题&#xff0c;早已是制造业者在经营上的痛点。而智慧工厂中的AGV无人搬运车…

Gitee 码云与Git 交互

优质博文&#xff1a;IT-BLOG-CN 一、进入码云官方网站&#xff0c;注册用户 码云(Gitee.com)是一个类似于GitHub的在线代码托管平台。 码云提供了包括版本控制、代码托管、协作开发和代码分享等功能&#xff0c;基于Git开发&#xff0c;支持代码在线查看、历史版本查看、Fo…

《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-06-大型网站系统架构演化实例

文章目录 第一阶段&#xff1a;单体架构第二阶段&#xff1a;垂直架构第三阶段&#xff1a;使用缓存改善网站性能第四阶段&#xff1a;使用服务集群改善网站并发处理能力第五阶段&#xff1a;数据库读写分离第六阶段&#xff1a;使用反向代理和CDN加速网站响应第七阶段&#xf…

CommandLineRunner和ApplicationRunner接口实现类中run方法发生异常导致spring程序关闭

今天其他组的一个程序在k8s中启动报错&#xff0c;启动之后立马就关闭了。我去看日志&#xff0c;发现最后面报了一个UnknownHostException异常&#xff0c;感觉是这个原因导致的&#xff0c;然后查看异常栈。定位到一个CommandLineRunner接口实现类&#xff0c;这个实现类里面…

乡村振兴的文化旅游融合:整合乡村文化资源与旅游资源,发展文化旅游产业,提升美丽乡村的文化内涵和旅游吸引力

一、引言 随着城市化进程的加速和人们精神文化需求的日益增长&#xff0c;乡村旅游逐渐成为旅游市场的新热点。乡村振兴战略的提出&#xff0c;为乡村旅游的发展提供了新的契机。在这一背景下&#xff0c;如何整合乡村文化资源与旅游资源&#xff0c;发展文化旅游产业&#xf…

搜维尔科技:光学动作捕捉系统用于城市公共安全智慧感知实验室

用户名称&#xff1a;西安科技大学 主要产品&#xff1a;Optitrack Priime41 光学动作捕捉系统&#xff08;8头&#xff09; 在6米8米的空间内&#xff0c;通过8个Optitrack Priime41光学动作捕捉镜头&#xff0c;对人体动作进行捕捉&#xff0c;得到用户想要的人体三维空间坐…

synchronized关键字和ReentrantLock锁区别

synchronized关键字和ReentrantLock锁是Java中用于同步的两个重要机制&#xff0c;它们在很多方面有所不同&#xff1a; 1. **锁定范围**: synchronized关键字只能在方法的执行过程中提供锁定&#xff0c;而ReentrantLock可以锁定任何对象&#xff0c;包括方法、代码块和对象。…

认养小游戏功能介绍

认养小游戏通常模拟了真实的农业生产过程&#xff0c;让玩家能够在线上体验种植、养殖的乐趣。以下是一些常见的认养小游戏功能介绍&#xff1a; 选择认养的农产品&#xff1a;首先&#xff0c;玩家可以从游戏中提供的多种农产品中选择自己想要认养的种类&#xff0c;如蔬菜、…

容器化Jenkins远程发布java应用(方式二:自定义镜像仓库远程拉取构建)

1.创建maven项目 2.配置git、maven 3.阿里控制台>容器镜像服务>镜像仓库>创建镜像仓库 4.执行shell脚本&#xff08;推送镜像到阿里云镜像仓库&#xff09; 使用到登录阿里云仓库命令 #!/bin/bash # 服务名称 SERVER_NAMEplanetflix-app # 镜像tag IMAGE_TAG1.0.0-SN…

JavaWeb之过滤器(Filter)与监听器(Listener)

前言 过滤器(Filter) 1.什么是过滤器 2.过滤器的语法格式 3.使用场景 3.1.如何防止用户未登录就执行后续操作 3.2.设置编码方式--统一设置编码 3.3.加密解密(密码的加密和解密) 3.4.非法文字筛选 3.5.下载资源的限制 监听器(Listener) 1.什么是监听器 2.监听器分类…

5G工业路由器实现驾考科目三实时监控与远程控制

5G驾考路由器的应用主要体现在智能驾考系统中&#xff0c;其优势包括提高考试安全性、效率和规范性&#xff0c;同时杜绝违规行贿作弊的行为。 在驾考系统中&#xff0c;5G工业路由器是数据传输的桥梁设备。车载设备如摄像头、定位系统、硬盘录像机、传感器等&#xff0c;通过串…

DetCLIPv3:面向多功能生成开放词汇的目标检测

DetCLIPv3:面向多功能生成开放词汇的目标检测 摘要IntroductionRelated worksMethod DetCLIPv3: Towards Versatile Generative Open-vocabulary Object Detection 摘要 现有的开词汇目标检测器通常需要用户预设一组类别&#xff0c;这大大限制了它们的应用场景。在本文中&…