mmo 开源项目
泰课正版课程跳转链接
开源项目 源码学习跳转链接
(项目为16年的,使用的NGUI )
仅作为个人学习笔记,只记录部分个人想要记录的内容,如果需要更多笔记内容,欢迎留言探讨。
游戏整体架构
角色系统
物理组件 装备组件 角色属性 角色阴影 角色buffer 状态机 角色网络命令处理组件
不同类型的角色 通过挂载不同类型的组件来实现
技能系统
使用技能树 方便扩展
技能状态机 技能AOE处理 瞬时技能的处理 镜头震动 粒子释放 伤害碰撞 子弹 buffer等的处理
场景系统
1、静态场景制作
场景编辑器的开发 包含怪物布置, 场景装饰物,场景结构的制作。
2、 场景运行时的动态管理
战斗控制 场景触发器 怪物的生成器 场景的动态加载及管理系统。
数据控制系统
主要管理两类数据,一种是静态的数据, 由Excel表格配置或策划直接在编辑器通过某些方式来配置的数据。
另一种是动态数据 比如 不同等级的角色 通过穿不同的装备 产生的HP,防御值。 角色的背包,装备等 都是动态变化的,通过数据控制系统来管理。
AI系统
设计不同怪物的AI AI系统通常可以采用状态机或者行为树的方式,这二者并不冲突。 这项目主要用状态机设计 ,后续课程可能讲解如何制作行为树。
网络系统
客户端网络设计,服务器网络设计。
客户端网络一般比较简单,但是如何设计一个比较稳定可靠,能够重连,能够进行数据重新进行网络同步的系统是比较困难的。
服务器端网络主要包含 如何隔离不同玩家的数据,如何充分CPU多核 通过多线程来设计服务器,以及客户端和服务端通信协议的一些设计。
数据保存
关于客户端数据保存的一些问题。
这个项目采用的是 通过protobuf来进行客户端本地的数据序列化。 这样的话,游戏既可以单机 也可以联网玩。
特效系统
·场景里的特效
·和玩家相关的特效,比如武器刀光,技能特效。
事件机制
事件机制是用于不同系统之间通信的机制,对于整个系统的解耦来说蛮重要的。
一种是广播的机制,一种是定向路由的机制,
UI系统
如何将UI和其他数据系统之间做比较好的解耦, 如果频繁改动UI,而对整个游戏的数据不会有太大影响。
这个项目设计的UI机制,主要包含 采用堆栈来管理的UI管理器,以及UI对数据访问接口的设计 UI本身表现脚本的设计。
写Shader
角色shader 场景shader
服务器开发
这个项目采用Actor模式设计,可以简单实现多线程服务器,以及解耦不同玩家的数据,扩展性也不错。
Login场景
主角身上挂载有:
NpcAtrribute 事件系统
PhysicComponent 物理系统
项目目录结构
工程目录结构
UI
场景模型
角色怪物单位模型 Armourer 军械师 Assassin刺客 Warrior战士
Config 配置文件 包括 关卡的配置文件 json 还有粒子效果的
suntemple 另外一种关卡的目录
Editor 编辑器扩展脚本 ImportFbx 模型批量格式化设定 MakeSceneEditor场景编辑器的拓展
GameScene >Login 登录选择角色的场景 level1-4 副本 mainScene主要场景
LevelCommonPrefab > 用于关卡编辑的组件,战斗管理组件BattleManager,进入关卡,退出关卡的触发器。UIroot UI控制器。
关卡美术资源相关的目录
LevelPrefab 关卡中的物件 比如灯 墙壁 火把 (熟肉资源就是加工包装后的资源)
levelSets 原始的美术素材 props 放的物件模型 (应该如同 RawAssets 生肉资源就是未加工包装的资源 )
missiles 技能子弹的配置
ModelPrefab 放置的经过处理的一些模型,但是不能直接在场景使用,只是有简单模型,通常场景中还会加粒子效果。将这里的模型和粒子效果组合之后,放入LevelPrefab.
models 放的原始的fbx模型。
particles 粒子的原始素材 粒子的材质,基本效果。 这些效果和模型组合 做成prefab
Plugins 不依赖于游戏的 第三方数据
其中包含 :
configDll 游戏的策划配置数据
Google.ProtocolBuffersLite unity可以使用的protocolbuffer库
protoDll 游戏使用的网络协议。
iOS目录中 ios相关插件,IAP的支付插件。
Prefabs 也放了一些处理后的模型,比原始的fbx模型多了 碰撞器,材质相关的一些详细的配置。还有一些动画相关配置。
Resources 放置的是游戏从代码可以访问到的数据资源,
在Unity中,Resources文件夹可以用来存放一些游戏中需要在运行时动态加载的资源,这些资源可以是图片、音频、视频、预制体等等。这些资源可以被直接从代码中访问,以便在游戏中使用。
除了可以直接访问的资源,还有一些资源可能需要通过其他方式访问。例如,一些需要在场景中实例化的预制体,可以通过代码调用Instantiate方法来动态创建,而不需要直接访问Resources文件夹。另外,一些需要在游戏运行时动态加载的资源,也可以通过其他方式来实现,比如AssetBundle等。
总之,Resources文件夹中存放的资源都是需要在游戏运行时动态加载和使用的,而其中一部分资源可以通过直接访问来获取,而另一部分资源则需要通过其他方式来访问和使用。
levelPublic 关卡中动态加载的公共组件。
particles 游戏中动态实例化的一些粒子效果 比如升级时的例子效果
UI 每个界面的UI实体
Resources 目录中的 room( 关卡的配置 ) UI(UI界面相关的实体 prefab)
room目录 临时资源 主要用于制作场景时 放置怪物点,动态元素时的参考模型 在最终游戏打包时 是不需要这些。 Scenes目录 临时性测试场景。
skills目录 放置的是技能的每个层 技能的结构是树状结构,根在Resources里面,通过Resources中的根节点引用每一层的技能配置。 这样就可以把每一层技能配置放在Resources外的目录,并且配置是可以复用的。
Animation中放置的是一些事件动画, 这些事件动画中都有一些关键帧,用于确定在多长时间触发某些技能特殊事件。
每个技能都有一个自己的目录,放置一些配置层。
Skyboxes目录中 放置着水,水域的材质 模型 TestScene 进行单元测试的脚本 thirdParty 使用的第三方库 UI目录 放置制作UI的原始素材 背景,按钮 图标等资源 标签:场景,游戏,之光,火炬,Unity,UI,目录,Resources,技能 From: https://www.cnblogs.com/MinervaZhang/p/17189971.html