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