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

news2024/11/29 12:56:18

引言

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

跟着演示学开发

基本操作

好,首先我们点击启动,我们这个项目是一个联网项目,服务器已经启动好了。现在我们先去点击加载我们的热更程序集,按照老规矩输入一下账户名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.coloradmin.cn/o/1658863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 ADC学习

ADC Analog-to-Digital Converter,即模拟/数字转换器 常见ADC类型 分辨率和采样速度相互矛盾,分辨率越高,采样速率越低。 ADC的特性参数 分辨率:表示ADC能辨别的最小模拟量,用二进制位数表示,比如8,10…

clickhouse学习笔记06

ClickHouse的建表和引擎选择思路讲解 ClickHouse的常见注意事项和异常问题排查 ClickHouse高性能查询原因剖析-稀疏索引 ClickHouse高性能写入剖析-LSM-Tree存储结构

【每日力扣】98. 验证二叉搜索树 与 108. 将有序数组转换为二叉搜索树

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 98. 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&a…

Centos7使用kubeadm搭建k8s集群(一主两从)----(mac版)

一、环境准备 1、下载centos7镜像 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 下载地址: centos安装包下载_开源镜像站-阿里云 选择对应的版本即可,我下载的:CentOS-7-x86_64-DVD-2207-02.iso 2、使用VirtualBox安装centos 选择新建&#xff0c…

【读论文】Gaussian Grouping: Segment and Edit Anything in 3D Scenes

Gaussian Grouping: Segment and Edit Anything in 3D Scenes 文章目录 Gaussian Grouping: Segment and Edit Anything in 3D Scenes1. What2. Why3. How3.1 Anything Mask Input and Consistency3.2 3D Gaussian Rendering and Grouping3.3 Downstream: Local Gaussian Editi…

用手势掌控PPT,玩转演示新姿势

推荐运行环境 使用anaconda创建环境,以免污染原来的python开发环境conda install python3.9pip install -q mediapipe0.10.0pip install pyautoguiPython: version 3.8 - 3.11PIP: version 20.3 请注意以下的坑 以下为我测试过程中的大坑,请及时避开&am…

【嵌入式开发实验】外部中断 按键 LED灯;定时中断;检测直流电机的转速 液晶屏显示;(附实验代码+注释+实验简析)| 附:步进电机/循迹小车相关

“永远不要停止思考,永远不认输。” 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区特邀专家博主🏅 �

4. Python的深拷贝、浅拷贝

文章目录 0、先说结论1、浅拷贝修改元素值2、深拷贝修改元素值学习链接 0、先说结论 无论深拷贝还是浅拷贝都会为新对象分配一块新的内存,因此新老对象id不相同。 对于浅拷贝,新老对象内部的可变and不可变元素id都是相同的(在没修改元素值之前)。 对于深…

【限时免费,手慢无】Unity 怪物资源包,MONSTER 动作超丰富,不领后悔!

Unity 怪物资源包,MONSTER 动作超丰富 前言资源包内容领取兑换码 前言 👾 突破想象!惊艳众人的怪物模型登场 👾 今天要向大家介绍一款令人瞩目的游戏怪物模型!这个看似丑陋的小怪物,却有着巨大的潜力&…

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

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

目标检测——色素性皮肤病变数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

如何理解VMware中的网络模式(NAT、桥接、仅主机)

目录 Ⅰ.NAT模式 Ⅱ.仅主机模式 Ⅲ.桥接模式 Ⅰ.NAT模式 NAT模式:将物理机的网卡作为虚拟交换机的上线链路,将vmware的私有网络转成可以上网的地址进行网络访问,因此在NAT模式下虚拟机是可以访问外部网络的(图一) …

电路板维修【一】

最近喜欢上了电路板维修,经常看很多博主的维修视频,觉得还是颇有收获的(维修板子原来有方法可循),于是做笔记如下: 一.【修了半天也没找到问题,原来是检查方向错了,变频油烟机板维修…

基于SSM的“医院院内物资管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“医院院内物资管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 功能模块图 系统登录页面 用户管理功能模块 模板列表管…

CSS---复合选择器、元素显示模式和背景(三)

一、CSS的复合选择器 1.1 什么是复合选择器 在CSS中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。 复合选择器是由两个或多个基础选择器连写组成,它…

监控异地组网怎么组网?

监控异地组网是指在不同地域的网络环境下,实现对监控设备的远程访问和管理。在传统的网络环境下,由于网络限制和设备配置等问题,监控设备的远程访问往往受到一定的限制和困扰。为了解决这个问题,引入了天联组网技术,实…

LLM大语言模型(十五):LangChain的Agent中使用自定义的ChatGLM,且底层调用的是remote的ChatGLM3-6B的HTTP服务

背景 本文搭建了一个完整的LangChain的Agent,调用本地启动的ChatGLM3-6B的HTTP server。 为后续的RAG做好了准备。 增加服务端role:observation ChatGLM3的官方demo:openai_api_demo目录 api_server.py文件 class ChatMessage(BaseModel…

英语学习笔记9——How are you today?

How are you today? 你好吗? 词汇 Vocabulary well adj. 好的 n. 井 fine adj. 美好的 两个方面:天气、身体。 搭配:a fine day 晴朗的一天    It’s a fine day today. 今天很晴朗。 good adj. 好的 口语偏多 搭配:Good jo…

【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析

作为一个程序员宝爸,每天的时间很宝贵,工作之余除了辅导孩子作业,就是补充睡眠。 怎么快速高效的进行当天A股涨停板的复盘,便于第二天的跟踪。这里简单写个示例, 获取当天连涨数排序,以及所属行业排序。 …

服务器数据恢复—RAID5磁盘阵列两块盘离线的数据恢复过程

服务器故障: 服务器中有一组由多块硬盘组建的raid5磁盘阵列,服务器阵列中2块硬盘先后掉线导致服务器崩溃。 服务器数据恢复过程: 1、将故障服务器中所有磁盘编号后取出,由硬件工程师对掉线的两块磁盘进行物理故障检测&#xff0c…