第一章 前期工作

  • 前言
  • 开发工具
  • 前期分析

前言

本文是一个使用Unity和C#来开发一个比较简单的PC端MMORPG(多人在线角色扮演游戏)。本文是个刚入门不到一年的新手大学生,边写项目边写文章的总结性文章,质量不高,供unity新手参考,高手请绕道。MMORPG是种网络游戏,所以一个网络游戏该有的服务端、客户端双端架构是必须的。至于是B/S(Browser/Server,浏览器/服务端) 架构 还是 C/S(Cilent/Server,客户端/服务端)架构,要看是不是打算在浏览器上发布。我们这里采用目前比较流行的C/S架构。

开发工具

Visual Studio 2022(需安装好 dotnet 6.0、使用unit的游戏开发、通用Windows平台开发)
Unity 2020.3.33flc2 LTS
Visio 2019
Excel 2019
SQL数据库或MongoDB(没确定,可能都用)
其他后面写

前期分析

作者已经默认你具备一定的C#语言和Unity的使用经验以及计算机专业相关知识。所以废话少说直接开始分析。做MMORPG游戏开发之前我们先要确定一下需求,在这一步我们的工作有这些:游戏用什么样的?游戏要开发哪些模块?这些模块的作用是什么?主要实现什么功能?模块与模块之间的数据流向是怎么样的?这些模块拼起来的游戏流程是怎么样的?

比较常见的RPG网络游戏通常有这几个功能模块:登录与注册,角色,技能,NPC,物品,商店,剧情,背包,音效,多人聊天,怪物,怪物战斗,任务,地图,好友,组队。如果是大一点的商业级MMORPG的话,还会有交易、拍卖行、公会、时装、公会战、充值、抽奖等等功能模块。
然后一个RPG网络游戏不仅有这些功能模块,还要有给这些功能模块做支持的非功能模块(玩家接触不到的模块),例如方便游戏开发的各种编辑器,如角色编辑器、剧情编辑器、任务编辑器、地图编辑器等等编辑器模块、导入游戏数据的数据配置模块、负责实现代码、资源的热更新模块、负责网络传输的网络模块、负责控制服务器时间的计时器模块、以及各种程序相关配置的配置模块。
这些是按代码的各种功能来划分模块的结果。实际上,在软件工程里负责降低代码与代码之间的耦合性不止与模块划分法这一种。实际上还有层次化、设计模式两种。

接下来讲层次化,我们可以把一个RPG网络游戏按照代码执行的各种层次进行划分,它的好处是不同层次是不同的抽象等级,每一层只负责单一的部分,每层的人只负责这一层的知识,与上一层或下一层的人对接就行了,就像我们可以把世界的物质划分为 原子层面的物理、分子层面的化学,有机大分子层面的生物学,某种人型生物层面的历史学。我们可以将现实世界按这样的层次进行划分,物理学家只负责物理层、化学家只负责化学层这样。一步步将复合、具体的知识分解成一个特定领域的专业化知识。层次化的缺点就是随着层次逐渐提高,每层细节在传递的过程中,信息不断丢失,沟通的成本不断提高,性能开销逐渐增加,层次划分难度也越来越高。所以我们不要分层分得太狠。当前在软件工程里的的分层的方案有很多,UI交互部分的层次划分有MVC(Model View Controller,模型、视图、控制器)、(MVVM,Model View ViewModel,模型、视图、视图模型)、MVP (Model View Presenter,模型、视图、发布器)三种。MVC和MVVM在unity用的不多,MVP用的比较多,有的人把MVP称作MVE(Model View EventSystem,模型 视图 事件系统),MVP架构模式是 MVC 的一个变种,很多框架都自称遵循 MVC 架构模式,但是它们实际上却实现了 MVP 模式。
程序内部的层次划分有
根据OOP(Object-Oriented Programing,面向对象编程)思想来实现的三层架构(View Service Dao,视图 服务 数据访问)是被广泛使用的客户端和服务端层次划分方案,不过通常会根据软件的特点进一步划分为四层或五层。
根据DOD(Data-Oriented Design,面向数据的设计)思想来进行分层的有ECS(Entity Component System,实体组件系统)是1990年代就出现过的,GDC2017大会后逐步火热的客户端和服务端游戏层次划分方案,优点是CPU利用效率高,开发难度初高后低,缺点是目前不成熟,可能开发时间较长。
根据SOA (Service-Oriented Architecture,面向服务的体系结构) 思想实现的微服务(Micro Services)是目前被广泛应用在互联网企业服务端的层次划分方案,优点是并发高,缺点是延迟比较高。
最后是设计模式,设计模式是前人在软件开发过程中对一些固定问题做出的一套富有经验性的解决方案,我们碰到相似的问题和条件直接套用这种设计模式就行了,其实上文的哪些分层方案也算是设计模式的一种,对于传统的OOP来说,设计模式共有23种,我们常用的设计模式有 观察者模式、单例模式、抽象工厂、简单工厂、外观、访问、迭代器、组装、享元、组件这几种。实际商业项目中当然会用到更多,只是频率不是非常高。

通过以上的分析,相信你大概知道我们学习MMORPG开发将会用到的模块划分与解耦方法。我打算用上文提到的MVP和三层架构以及单例、观察者、享元等来设计本次的简单MMORPG游戏。游戏将包含以下几个功能模块:登录\注册,角色,技能,NPC,物品,商店,剧情,背包,音效,多人聊天,怪物,怪物战斗,任务,地图,好友,组队。非功能模块包含:基于Excel的数据转Json的工具,从Json加载游戏各项数据的配置模块,基于行为树的AI模块,基于KCP或TCP的通信模块,基于Protobuf的数据传输模块,基于HTTP的热更服务器模块、基于XAsset的资源热更新模块、基于huatuo的代码热更新模块、计时器模块、服务器加载模块。

Unity MMORPG游戏的设计(一)前期简单分析相关推荐

  1. Unity MMORPG游戏优化经验分享

    今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORPG游戏进行优化. 在优化Unity游戏时,我们一般从四个方面:CPU.GPU.内存.工程配置等入手, ...

  2. Unity 3D 环境特效||Unity 3D 游戏场景设计实例

    Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...

  3. 小游戏2048设计思路超简单

    2048作为一个经典的小游戏,对于C语言的逻辑练习是一个比较好的案例了,看似很复杂,但是如果掌握了设计思路,那么就不会觉得难了,而且会了这个之后对今后编程的也会有很大的帮助. 先分析游戏逻辑,游戏其实 ...

  4. mmorpg 游戏服务器设计

    MMORPG不同于其它的局域网的网络游戏,它是一个面向整个Internet的连接人数过万的网络游戏,因此他的服务器端设计则极为重要 服务器的基本设置 在大型网络游戏里,通常设计为C/S结构,客户端不再 ...

  5. MMORPG 游戏服务器端设计

    之前有过一篇介绍游戏服务器端的博文 http://blog.csdn.net/liuxialong/archive/2011/06/12/6539762.aspx 但是篇幅太长,而且过于关注细节,适合 ...

  6. MMORPG游戏服务器端设计

    之前有过一篇介绍游戏服务器端的博文 http://blog.csdn.net/liuxialong/archive/2011/06/12/6539762.aspx 但是篇幅太长,而且过于关注细节,适合 ...

  7. Unity 3D 游戏编程设计g03

    1.1游戏对象运动的本质是什么 游戏对象运动的本质是游戏对象随着动画帧的变化而产生的游戏对象的坐标以及角度的变化.通过平移.旋转.缩放的方式改变游戏对象的transform属性. 1.2抛物线运动 ( ...

  8. Unity 3D 游戏编程设计g04

    unity-3d/Priests and Devils g04 at main · Mike0006/unity-3d (github.com)

  9. 【unity】快速了解游戏制作流程-制作九宫格简单游戏demo

    前言 hi~大家好呀!欢迎来到我的unity学习笔记系列~,本篇我会简单的记录一下游戏流程并且简单上手一个通过九宫格移动到指定位置的小游戏,话不多说,我们直接开始吧~ 本篇源自我看B站一位up主的视频 ...

  10. MMORPG游戏的文案设计

    RPG游戏,故名思义指的是游戏玩家融入所扮演的角色和游戏中的世界的过程,游戏的扮演观就是对玩家如何融入自己扮演的游戏角色的看法.而 MMORPG则更多的是以实现自我为主的角色扮演,它可以不需要剧情来实 ...

最新文章

  1. RDIFramework.NET ━ 9.5 组织机构管理 ━ Web部分
  2. 虚拟机删除后服务器内存,卸载虚拟机后仍占内存
  3. 平衡二叉树(AVL Tree)(左旋、右旋)
  4. gx works2 存储器空间或桌面堆栈不足_静态体验奇瑞艾瑞泽GX冠军版,细节做工很精湛...
  5. MySQL高级-视图
  6. 如何在回调中访问正确的“ this”?
  7. 做一款仿映客的直播App?看我就够了
  8. telnet的基本配置(cisco、H3C、huawei 三个例子)
  9. Vue组件创建和组件传值
  10. 计算机it dt ct基础知识,ot是什么意思(什么是CT,IT,DT,OT)
  11. 如何双击连上校园网NCUWLAN?---bat+Python3给出了可行性答案
  12. 数字信号处理设计与仿真分析
  13. 泰坦尼克号生还率预测分析
  14. java高并发系列 - 第1天:必须知道的几个概念
  15. 数字图像处理:4.色彩空间转换
  16. linux显示分区命令,在Linux中查看分区表的4种方法
  17. 【BLE】广播数据包结构讲解,五颗蓝牙芯片对比
  18. php任意文件删除漏洞,phpyun二次任意文件删除漏洞
  19. 2014 年终总结:即使艰难,也要始终怀揣梦想
  20. java最新面试题及答案2020 阿里(十六)

热门文章

  1. Manjaro 开发环境配置和使用技巧
  2. PTA 6-1 单链表逆转
  3. vue中使用leaflet加载open street map的一些使用
  4. 自行解决12306页面显示异常的问题(长城宽带下WWW。12306无法正常使用)
  5. meta pseudo label
  6. 中移物联网联合上研院推出快速定位服务,助力智慧物联网发展
  7. 关于Web 验证方法你知道几种
  8. 文件名太长无法删除怎么办
  9. ElasticSearch 一文读懂
  10. Windows之cmd命令检查网络