pc客户端1和2是什么意思啊 客户端是什么意思

我大多数时候不喜欢直接用别人的代码 。本着自己写的原则,客户端结构总是自己维护 。
代码结构
整个客户端大致分为两部分:框架和游戏 。Frame是框架层,是所有项目通用的 。Game是游戏层,只能写当前项目使用的代码 。
框架:说是所有项目通用,有点夸张 。毕竟游戏的类型非常多,商业游戏引擎不敢说对所有游戏都通用,但这就是这部分设计的初衷 。这部分其实就是沉淀下来的代码,即使重新构建一个新的项目,仍然可以直接使用 。
摄像头:再次封装unity的摄像头 。提供与封装所有摄像机相关的常见操作 。
字符:封装字符 。游戏里所有长得像人或者可以算是人的东西都是角色 。
类:对象池,适用于各种对象,就是需要申请的时候,先在列表中查找不用的对象,可以重用的返回,没有的创建一个 。
CommandSystem:指挥系统 。
特点:
1.封装逻辑
2.连接逻辑和接口,以及项目中的任何模块 。
3.延期执行
4.线程安全性,其中delay命令可用于将逻辑放入主线程中执行 。
5.日志打印
基于以上特点,一般用命令系统深圳生活网在逻辑意义上表示一个事件,命令中可以访问任何项目代码,所以当一个事件关联多个模块时,相关代码要封装到一个命令中 。
比如当数据发生变化时,数据存储会有变化,界面也会有相应的变化,所以需要把逻辑封装成命令,在适当的地方调用命令 。调用者只需要关心触发了什么事件,而不是事件的具体内容 。
系统最初的灵感来源于天龙八部代码中的命令 。天龙八部里的命令只是一个结构,一堆没有具体类型的参数,然后在发送的时候指定那个参数的含义,然后在使用的时候强转换类型 。
但是我设计的命令系统的核心是逻辑,也就是对象,这就导致了一些其他的特性,比如延迟执行,线程安全等等 。
常用:不知道怎么分类,常用的部分大部分都在这里,比如工具函数,全局定义,枚举定义等等 。
Component: component,想法来源于unity,但我刚开始用unity一个月,就知道了“组合而不是继承”这个表达 。然后我又用了两年unity 。这里component的核心思想是,凡是可以脱离类的核心,需要单独更新的东西,都可以写成一个组件 。所以,这里的组件强调的是逻辑更新,而不是把所有东西都放进组件 。相当于结合和继承的结合 。
数据库:数据库相关的,比如MySQL,SQLite,自己写的数据表 。
DynamicAttackScript:代码中动态附加到GameObject的脚本,实际上通常有一些脚本需要在面板上显示调试信息 。
效果:粒子特效的封装,提供一些特效的常用操作 。
游戏框架:核心管理器 。以及其他一些独立的系统 。
GamePlugin:主要提供调用外部插件的接口 。另一个项目写的插件,放在项目的指定目录下,会自动调用 。
游戏场景:游戏逻辑场景 。
一般游戏分为几个逻辑场景,分别代表游戏的不同阶段 。一般使用的资源和逻辑共同决定了逻辑场景的划分 。
一个逻辑场景包含几个存储在树结构中的流程 。一个逻辑场景至少包含一个启动进程和一个退出进程 。
流程代表逻辑场景内的状态划分,流程切换通常涉及相应的界面切换 。
进入过程时的操作通常对应于退出过程时的操作 。例如,如果在进入流程时打开了一个界面,那么在退出流程时应该关闭该界面 。进入流程时,某项操作被禁用,退出流程时应重新启用 。
不允许进程相互访问 。进程应该相对隔离 。只有在进入或退出进程时,才允许判断上一个进程或下一个进程的类型来执行不同的逻辑 。
进程切换时,只会停止旧进程的更新,启用新进程的更新,不会销毁任何进程 。
当切换逻辑场景时,旧的逻辑场景和该场景的所有进程将被销毁,新的逻辑场景将被加载和初始化 。
一个逻辑场景通常使用几个资源场景,资源场景的显示根据流程进行切换 。
其实主要作用是区分不同的游戏状态,隔离逻辑,尽量不要有不同逻辑之间的耦合 。
LayoutSystem前身是C写的UI框架,C从opengl开始,封装UI,隐藏底层的具体实现,只需要上层关心游戏界面的逻辑 。从C改为unity后,这部分只是替换了底层已经被unity实现的部分,上层没有太大变化 。
MovableObject:字面意思是可移动的物体,即游戏中所有需要移动或具有位置属性的物体的基类 。
ObjectPool:对象池,不同于ClassPool,在这个池中存储GameObject深圳生活网,ClassPool存储object 。
也就是说,所有从磁盘预置实例化的GameObject都将存储在这个池中,它们将被回收并默认存储,除非指定实际销毁 。
Resource Manager:Resource Manager,统一了从AssetBundle和Resources加载的方式,让上层只需要知道加载了某个资源,而不需要具体关心它需要加载到哪里,加载到哪里在读取配置文件之初就决定了 。一般是从编辑器开发环境的资源中加载,打包后再从AssetBundle中加载 。也可以在编辑器开发环境中从AssetBundle进行测试 。
插座:网络部分 。自定义通信协议 。虽然网络通信已经有很多成熟的商业序列化库,但是我还是自己写自己的序列化通信协议,由自己的实际情况触发 。毕竟不难,写作效率也不低,优化完全可以自己掌控 。
【pc客户端1和2是什么意思啊 客户端是什么意思】以上是对框架部分架构的介绍 。虽然不是很好,但经过多年的不断摸索,始终是一套我能用的架构 。从字数上可以看出,有两个重要的部分,CommandSystem和GameSce深圳生活网ne,这是实现大部分功能的两个系统 。还有一个重要的组件,它们相互补充并支持大多数客户端功能 。

    推荐阅读