导语 如何做一个多线程游戏框架?腾讯游戏学院专家Tao将在本文通过一个demo来说说游戏逻辑的多线程化。

众所周知现在各种游戏终端的发展十分迅猛。其中一个共同的特征是"多核化",由此带来了游戏开发的"多线程化",但大量的切入点主要集中在引擎层、WorkerThread层。那游戏逻辑层呢?这里笔者想通过一个demo来说说游戏逻辑的多线程化,然后在推销一下它下面的地基GLogic。

这里我们先定一个小目标:

"一套代码,支持各种线程模式,开发还很简单"

然后我们来看看demo:

https://share.weiyun.com/5zLdeWj

请用Unity2018.2.0f1打开这个工程。实际上真正有意义的代码并不挑Unity版本,只是笔者拖了个UI,所以有兼容性问题。

命名规范

· L 代表 Logic

· M 代表 Main

· N 代表 Net

· 线程模式里的LMN、LM_N、L_M_N的含义

· LMN:LogicMainNet都在一个线程里;

· LM_N: LogicMain在一个线程里,Net在单独的线程里

· L_M_N:Logic Main Net各自在自己单独的线程里

Demo1

打开Demo1;

选中Entrance节点;

在inspector上选择线程模式;

点击播放按钮;

在Console窗口下观察不同;

1. L_M_N模式下你应该看到这样的输出:

2. LM_N和LMN模式下你应该看到这样的输出:

然后,然后这个无聊的demo就完了。那这个无聊的demo到底做了啥?

这个无聊的demo通过两个类的协同工作来累加一个值,一个是MNumAccSys,另一个是LNumAccSys,他们的前缀L或者M代表了我们对它的抽象,L代表了逻辑线程,M代表了主线程。敏感的同学应该可以意识到笔者这里想扯的是表现与逻辑分离,但我们这里还不想展开说。

回来观察Log都打些什么:

· 可以看到在L_M_N模式下,MFrame(主线程帧号)第一帧的时候把数值从0加到了1,然后由LFrame(逻辑线程帧号)在146帧的时候把这个值从1加到了2。继续看下去的话会发现这两个帧号就如同你和你的前男/女友一样-没有半毛钱关系;

· 接着我们看LM_N和LMN模式,会发现这两个帧号变得如胶似漆-你现男/女友的感觉;

接着你可以继续跑下去或者编个手机包测试一段时间,观察有没有多线程崩溃或错误。如果没有,那欢迎感兴趣者继续阅读。

我们意识到这个demo有这样一个特点:在不同线程模式中维持了相同的时序,所以无论哪个线程跑得快慢、多少,运行结果相同。这里大家敏感的话可以意识到笔者想扯帧同步,没错,但是我们这里也不想马上展开说。

那我们这个累加逻辑是怎么实现的呢?

可见我们实际上是在利用消息机制,在多线程的时候是线程间异步通讯,在单线程的时候是线程内异步通讯,所以我们的时序可以保证。

同时提一下,整个逻辑的起始,放在了EntranceForDemo1中:

恭喜你现在你做了个任意线程模式下都能跑的游戏

Demo2

如果我们改下代码,让计数只在L层的LNumAccSys计算,而在M层为一个UI.Text控件赋值呢(DisplayUIForDemo2)?那恭喜你,你已经做到了任意线程模式下的逻辑和表现分离,懒得自己写的同学请运行Demo2。如果出现Unity版本导致的UI不兼容,就请你自己怎么搞下,笔者就不管了。

Prefab长这样:

入口在这:

实际逻辑在这:

Demo3

那如果我们再改下呢?我们加入一个NFakeServerMgr,用于提供每秒一次的逻辑帧驱动。那么一旦这个NFakeServerMgr变成真Server,频率变成66毫秒一次,那我们就变成了一个任意线程模式、表现逻辑分离的帧同步游戏了。仍然懒得自己写的同学就请运行Demo3。

模拟帧同步服务器:

示例帧同步客户端:

Demo4

那如果我们再继续猛烈的改一下呢?数据分离,加入实体,XXXSys…呢?恭喜你,你已经有了一个任意线程模式、表现逻辑分离、ECS的帧同步游戏了…。懒得写的同学也自己去写,这么多代码已经超过了Demo的容量。

本文Demo中没说的东西

· 你可能注意到了FakeObjPoolMgr是假的

这里只描述一下该写什么东西:你需要有一个多线程自释放对象池

· 其实LogUtil也值得你看下

· 其实笔者本身在这个GLogic上做的东西远不止文中所提及的内容,大家请发挥想象力

你说了这么多,这GLogic到底是啥

限于篇幅我们这里简单说说里面最基本的一些概念,其它更深层的用法请大家自己阅读代码吧,别担心,里面有充足的注释。

基本上GLogic作为一个逻辑框架,提供了两个东西:

1. 时序控制

2. 消息机制

它通过实现一个叫做"逻辑树"的概念来达成以上两点。

1. 逻辑树

a) 逻辑树由逻辑节点互相挂接组成,逻辑节点是一个实现了IGLogicNode接口的类;逻辑树的挂接形态是时序的基础;

b) IGEvent和IGEventListener分别作为消息和消息监听器的接口,提供了在逻辑树中监听消息的能力;

c) 逻辑树的根节点一般称为LogicCore,本身仍然是一个逻辑节点,但额外担负了循环入口的重担;

d) 逻辑树之间的相互挂接实现了上面各Demo中的任意线程模式切换

2. 时序控制

树状结构,深度优先遍历

图中弧线表示默认执行顺序,

本执行顺序可通过"节点优先级"进行深度定制

3. 消息机制

a) 层级消息广播

可见在不同层级上抛出的消息,它的辐射面是不同的

本顺序可以通过"消息优先级"进行深度定制

b) 消息监听

根据我们的广播原理,各Sys都将监听到Event1和Event2

但Event1的广播量明显有浪费

c) 同步及异步消息

各Sys会立即收到Event1,而Event2则会在下一帧收到

d) 线程安全

Bridge是一个线程安全节点,这样另一个线程就能安全的在它上面抛出Event1

各Sys将在ThreadA的时序内收到Event1,无需担心线程安全问题

4. 其它:

a) 消息拦截,在HandleEvent中返回true来阻止消息继续广播。这个特性在异步Job分配、负载控制、loading拦截输入等场景尤其便利。

b) 节点优先级、消息监听优先级,决定了节点的执行顺序及收到消息的顺序,这个机制在动态启动高优先级逻辑、数据池优先于所有逻辑感知数据变化等场景尤其便利。

c) C++版本?GLogic有适用于Unreal4的C++版本,逻辑思想类似,大家可以自行改造。

综述

说这么多,笔者无非想表达一个意思:希望GLogic能帮助你在当下多核设备环境中搭建高性能、高灵活度的游戏框架。

使用代码的话请保留作者声明。

scratch做简单跑酷游戏_腾讯游戏学院专家:做一个多线程游戏框架可以多简单?...相关推荐

  1. mie散射理论方程_腾讯游戏学院专家:PBR渲染模型的理论及具体应用

    编者按 PBR,基于物理的渲染模型,是当前主流游戏引擎使用的真实感3D渲染模型.腾讯游戏学院专家Leonn,将和大家分享PBR的理论知识以及在Disney和UE中的典型应用. 文 | Leonn 腾讯 ...

  2. 1709 ltsb 内存占用_腾讯游戏学院专家分析:Unity在移动设备的GPU内存机制

    导语 CPU和GPU是共享一份内存的吗?腾讯游戏学院专家Donald将在本文尝试以一张贴图纹理的虚拟内存占用为例,解答一些内存方面的问题.本篇主要分析iOS系统,后续会更新安卓篇. 开发手机游戏时,常 ...

  3. 用python设计游戏_我用 Python 制作了一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  4. 腾讯游戏学院专家实例剖析:如何优化休闲游戏的美术风格?

    导语:随着人们生活节奏逐渐加快,碎片化时间越来越多,休闲类手游成为了一部分人上下班途中的一大选择.这类游戏玩法不会过于复杂,有时会带有一些收集元素.除此之外,游戏的美术表现也是吸引玩家长期体验游戏的关 ...

  5. 腾讯游戏学院专家分析:Unity在移动设备的GPU内存机制

    导语CPU和GPU是共享一份内存的吗?腾讯游戏学院专家Donald将在本文尝试以一张贴图纹理的虚拟内存占用为例,解答一些内存方面的问题.本篇主要分析iOS系统,后续会更新安卓篇. 开发手机游戏时,常听 ...

  6. 省带宽、耗电小,腾讯游戏学院专家解析手游渲染架构

    编者按 如何让手游更省带宽,耗电量更少?渲染或是其中一个可突破的点.本文中,腾讯游戏学院专家Hailong将从为大家解析TBR渲染架构的特点. 什么是TBR? 全称是Tile Based Render ...

  7. 腾讯视频如何下载视频_腾讯视频如何做明星装扮

    这篇文章主要说的是腾讯视频如何下载视频_腾讯视频如何做明星装扮,希望可以帮助大家.腾讯视频时刻为您推荐最新最火的视频,精彩不断随时观看.支持各种画质的下载,没网也能享受高视觉的享受,让生活的每一刻都不 ...

  8. 腾讯游戏学院专家:如何避免出海游戏服务器水土不服?

    曾参加2018GWB腾讯游戏创意大赛的<风暴岛>,获得了WeGame的签约以及腾讯游戏学院专家团的指导,现已于4月在WeGame和Steam双平台上线.本文采访了负责指导服务器方面的专家J ...

  9. 如何做优化SEO排名_海南哪个公司可以做_seo优化

    有需要交流的可以加我微信pangna169.原文来之:如何做优化SEO排名_海南哪个公司可以做_seo优化 在一家专业的网络营销公司中,他们的SEO团队需要有着多种不同的专业角色构成,现在的互联网时代 ...

最新文章

  1. Tomcat启动分析server.xml
  2. [置顶]IA32 architecture 学习笔记 (一)
  3. Matlab注释语句
  4. 信号与系统——微分方程与差分方程——编辑中
  5. miniconda3 安装numpy_OpenCV4在Ubuntu1810/1604安装
  6. MySQL/sqlserver查询in操作 查询结果按in集合顺序显示
  7. 数据结构练习题之树和图(附答案与解析)
  8. c++实验七-—项目2
  9. 苹果上新了!新款iPad Pro发布:妙控键盘成最大惊喜
  10. 各种水龙头拆卸图解_各种水龙头拆卸图解法
  11. mac虚拟机vm屏幕一直闪烁_VM虚拟机VMware Fusion Pro 11
  12. java 中方法里的参数_【Java基础】12、java中方法的参数传递机制
  13. 计算机必懂的54个英文单词和缩写
  14. Greenplum字段拼接
  15. 计算机组成原理选择题题库
  16. 更新驱动后计算机不能开机,(图文)Win10更新显卡驱动后无法开机进入系统
  17. 三角函数的极限和导数
  18. OSM学习之路(一):OSM介绍
  19. 人体的神经系统图 分布,神经系统分布图解析图
  20. Chrome浏览器更新

热门文章

  1. 各大航空公司将加大海南春运期间运力投入
  2. mysql数据库修改编码
  3. 张小龙公布微信小程序进展 可直接从桌面进入
  4. Dev GridView 绑定Listlt;Tgt;、BindingList lt;Tgt;、BindingSource
  5. VS环境下的makefile编译
  6. Mahout各种推荐器的主要特点(转)
  7. 我的Ubuntu体验
  8. 今天又听了蓝色的缘分
  9. windows下 安装 rabbitMQ 及操作常用命令
  10. winform 中 给DataGridView的表头添加CheckBox