当前课程知识点:游戏程序设计 > 第四章 《游戏循环及实时模拟》 > 4.1 游戏循环概述(上) > 4.1 游戏循环概述(上)
这个课大概就是
因为讲这个游戏循环的话
游戏循环感觉就是不是很好去说
所以我就做了一个很简单的
一个demo
然后这个demo特别简单
本来的话可能不需要就是像这里头所说的
做的这么就是结构不需要这么复杂
但是我们实际就是为了介绍一下
就是做游戏一般是怎么回事
所以我们还是按照一个
就是比较大的一种游戏的方式
然后大概去做一个架构
我这一个Demo也放在那个github上(https://github.com/dreamanlan/GameDemo)
如果大家有需要的话
可以从上面下来看
先看一下这个dreaman就是很简单
可能会觉得一个基本上
都没有什么美术资源
然后大多数就是直接拿的Unity的东西
所以看起来会特别简陋
我这把声音也发一下
这大概是怎么一个
然后会
就是会设计上有一些UI
然后我们会有一个地形
而这上面摆了很多小球
然后下面会有将来有一个玩家
还会有几个VI会跟着他
然后就
我们可以用这个鼠标操作它动
如果动的话走到哪个地方
它上面这个球就会掉下来
掉下来如果被砸掉的话就会掉血
大概就是这样一个规则也比较简单
我本来想做的复杂一点就是这个小球的数量
如果越小的话就是重力越大
然后球会掉得越快
但是好像这个就是效果表现不出来
因为可能球的数量太多了
这个场景大概摆了两千多个球
大概就是这么个样子
接下来我们讲一下这个游戏循环
我下面说的这个的是就是我们的一个理解
就是大概就从软件的角度来说
因为有各种各样的程序吗
我们可以看到的就是这里是列到了第一类
有命令行程序
向我们现在可能看到的比较多的就是
这种图形用户界面的这种程序
还有像操作系统的服务
或者是我们的网站
还有财务的这种系统
或者有一些是
ERP这种企业资源规划的这种系统
这些系统的话
它主要都是面向任务的
而这种软件有一个主要的特点
就是它是被动处理
就是只有你去请求它的一个功能的时候
它才需要进行处理
如果不做请求的话
其实这个时候它就是在那等待
它就不需要做什么
我们再看一下另外一类
就是类似自动控制的这个软件
这类软件
我不知道大家有没有接触过这个
这种控制置换的东西就是
自动控制这块的东西
这个所谓的PID这种
这种软件的话呢
它的特点就跟刚才所说的会不太一样
它是不能够停下来的
因为特别是在工业控制里头
如果停下来的话
那现场可能就会失控
所以这种呢它会是一个主动的处理
那游戏是什么样子的
游戏实际上是更接近我们一个真实的世界
我们可以看到一个世界的话
实际上是和每一个人
或者有关
但是其实关系不大
有句话说少了谁地球都会照样转嘛
然后游戏最典型的一个特点
就是游戏实际上是对真实世界的模拟
不管我们是玩哪一种类型的游戏
就是想着最简单的棋牌类的游戏
实际上也是对我们现实世界的这种
棋牌的这种模拟
然后大一些的话
比如说最典型的就是二匹机RPG
PG是角色扮演类的游戏
那它就是完完全全在模拟
我们一个真实的世界
真实的世界它跟这个也是比较类似的
就是实际上我们玩家不去做任何操作的话
这个游戏世界它还是会正常运转
由于这个特点
所以才引出就是我们为什么
会提到说游戏需要一个循环
因为游戏他是要主动运转的
而主动运转的整个世界的驱动
它是在这个循环里头的
在我们这个游戏行业一般的话
我们会把这个循环称之为心跳
就是相当于这个世界
它是有个心跳
它在每一次心跳里头会进行相应的处理
然后就驱动了这个整个游戏世界的运转
然后还有像我们所说的NPC
NPC就是非玩家角色
就是一般是指有AI来控制的这个角色
这也是靠这个来驱动的
还有一块就是游戏世界里头和玩家的交互
说到这个游戏循环的话
我这个主要讲的是
前端的这个游戏的程序循环
那么前端一般
我们现在通常都会有一个游戏引擎
然后呢
在具体做游戏的话就有一个游戏的逻辑
那么所以游戏循环一般也会分成两个层次
就是最底层实际上是一个引擎的循环
然后游戏的循环一般来说
是有引擎的循环的驱动的
我们提到引擎的循环的话
这里头有几个就是3D引擎这几个概念
这个和2D不一样就是3D的
其实它也有点模拟
我们真实的这个摄像的这个情况
就是这个世界实际上是相当于
有一个摄影师拿着这个相机
然后在观察这个世界一样
所以引擎实际上
展示出来的就像是一个摄影师
在一个摄像机里头看到的一样
所以这里最主要的一个概念就是摄像机
然后另外一个就是
我们游戏里说都会有可以动着这个物件
这就是可以移动物件
然后另外还有一个就是我们前面说到
游戏它是需要有一个游戏世界
我们会通常会是有一个场景
就是游戏里的所有的东西
都会在这个场景里发生
还有一块呢
就是游戏肯定是有玩家的吗
玩家和游戏需要交互
所以会设计到UI
就是一般会在游戏的话
引擎往往就会在这几个层面提供
就是包括UI系统
场景管理
然后有一些就是游戏物件的一些管理
和一些支持
然后有相机的这个概念
然后我们下面就会提到这个
引擎的这个主循环
引擎的主循环呢
就是大概就是右边这个图上
这么一个过程
一般来说
游戏的刚才我们说的另外一个循环
就是游戏逻辑的循环
我们今天实际上主要会议介绍
游戏逻辑的循环
这里可以简单过一下就是引擎这一块
就是引擎的循环里头一般会有一块
是会去驱动游戏逻辑的循环
然后在游戏逻辑的循环里头呢
我们会有刚才提到的
比如说NPC玩家
就是这些可移动这些物件的
比如它位置的变动
它的属性的变化以及相应的这样
就是基本上可以理解成是一个
数据层面的一个变化
所以首先第一步就是游戏循环
然后变化之后呢
然后引进层面会就相当于游戏逻辑
会控制引擎层面可移动物件
它的位置旋转缩放的这些变化
所以引擎上往往会做一个更新
因为对一个游戏场景来说
如果数量非常多的话
我们可能会采用一些就是空间的设计结构
去进行管理
所以这个时候往往会涉及到
比如说有二叉数或者是八叉数
或者这种方式去管理的话
那就会涉及到
这些相应的数据结构的一些更新
然后在这个之下呢
就是场景的整个是渲染
场景渲染完了之后
然后就是渲染UI
因为UI一般是覆盖在场景表面上
然后最后还有一个就是双缓冲的切换
这个现在基本上是标配了
就是一般在显示一帧游戏画面的时候
另外一帧就正在后台
会提前写好一个屏幕
然后到时候在显示的时候
它就表现上就会比较连贯
这个是刚才说的这个大的一个图
你可以看到一个相机
这是一个场景里的各种物件
那么实际上
右边这个图就是我们看到屏幕上的东西
屏幕上的东西实际上是
所有的这个3D物件
在这个相机的这个近裁剪面上的一个投影
接下来说道的就是游戏逻辑的循环
前面其实我们已经说过
就是它可能会是由引擎来驱动
一般呢
游戏的循环就逻辑的循环
游戏逻辑的循环是在引擎循环的每一帧的开始
他们一帧的开始
或者是结束做这个处理一般不会嵌在中间
因为引擎的整个的渲染
我们可以大的理解成它就像数据
需要一个原子的操作一样就是它需要枷锁
如果在中间
我们有对这个的修改的话
可能会影响整个引擎的这个管线
所以一般都是在开始或者是结束
然后游戏逻辑的循环
主要是用来驱动游戏的各个子系统
这个是我们后面会提到的
一般来说呢
是有两类的风格
就是一种可能
就是大家可能会看起来会觉得
更有设计的特点就是事件或者是消息驱动
还有一种人就是比较直白的
实际就是我们会在那个循环里头
依次写着调各个子系统的Tick
就是前面说的心跳
然后像我们的话
其实更多的会用这个更简单的这种方式
就是事件的和这个驱动的这个方式呢
虽然在技术上来说
可能它会显得就是更有技术含量一点
但是呢
实际上因为游戏开发是一个多人协作的
就是比如说
而且游戏的开发的过程
一般时间都会比较长
所以在这个过程中可能会有
比如说能源会有流动
就是一开始设计的人
可能和后面继续做的并不是同一个人
所以能保持这个简单和可理解
对我们来说是一个比较重要的事情
所以一般我们会采用更简单
这种方式就是
一般就是一个静态循环
这个可能接近
我估计大家应该对这一块都比较熟悉
就是循环的几种类型
这个是比较老一点的
就是以前在windows上
因为都是GUI的系统嘛
windows都是消息驱动的
所以游戏的循环以前就是在
windows消息的这个主循环里头
就相当于每一次
这个windows程序处理完
它的消息队列里的消息
然后接下来呢就会做一次游戏的Tick
另外一类就是游戏帧的回调
这其实也是一个原来比较老的
就是windows系统上的一个引擎
就是windows系统上的一个引擎,也是开源的,叫OGRE
它就是这种方式
就是我们可以看到它是因为它可以在
每一帧的开始和结束还有两个回调
然后中间就是刚才我们说的游戏引擎的循环
它会渲染当前的那个场景
然后在这个两个回掉里头
实际是我们会执行游戏的逻辑
去修改这个游戏世界逻辑层的一些东西
然后中间那就会通过引擎的方式表现出来
还有一个呢
这个就是Unity3D的
我估计大家可能都现在应该都接触过
这个Unity3D吧
就是说现在应该是比较
相当于它把游戏开发就做的很简单了
就是让大家不用猜
在去了解那些很底层的东西
然后它用了一个脚本呢
也和传统一般
比如说用C++语言呢要简单很多
就是用C#语言
然后在这里讨论主要的方式就是
我们可以理解成是一种事件驱动
但是实际上
Unity3d这个它是在MonoBehaviour上
实际上是在C++里头
直接去调用了这四个方法
而不是说用了C#的event的这种机制
但是它本身应该还是属于一种事件驱动
就是大概是三类
然后下面就提到前面
我们说到的游戏循环那么游戏循环
如果它只是循环的话
它总得要有一点事情去做
那主要做什么
就是游戏循环里头就是在驱动各个子系统
就是每一个子系统
基本上都会有一个心跳
那么由于循环里头实践就是
依次对各个子系统的这个心跳着一个调用
前面说的有两种方式
一种静态的方式的话
我们就可以看到这个循环会看的很直白
可能就是一个一个的会分别去掉
如果是那种事件驱动的方式呢
这个时候可能看到的是
对一个已经注册好的一个列表循环Tick
然后这个列表人可能会在中间会有变化
比如说某些系统
它这个时候可能不需要工作了
它可以从列表里头移出
那Tick的时候
它就会少Tick一些
所以性能上可能会稍微好一点
但是因为一般游戏的系统
其实大多数时候都是要一直工作的
所以这种比较直白的方式呢
其实特别是对RPG游戏的话
基本上两者差别就很小
然后这是几个比较常见的
就是因为现在
可能一般网络游戏会比较多嘛
所以一般会有一个网络系统
然后接下来就是场景
然后3D游戏呢
因为资源会比较多
所以也会涉及到这个资源管理的一个系统
然后就是游戏对象
比如说玩家NPC
这个是一个比较重要的一个
还有就是AI主要是用在NPC身上
还有就是战斗性战斗的话
一般就是我们所说的技能
就是技能
包括还有一些射击的表现
还有报复这种
还有一块是剧情另外一块是UI
另外一块是意外
-1. 1什么是游戏(上)
--选择题
-1.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-8.2 物理回顾2
--单选题
-8.3 材质 1
--8.3 材质 1
-8.4 材质 2
--8.4 材质 2
-8.5 材质3
--8.5 材质3
-8.6局部光照
--8.6局部光照
--单选题
-8.7 全局光照
--8.7 全局光照
--单选题
-9.1 动画介绍
--9.1 动画介绍
--多选题
-9.2 游戏动画介绍
-9.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题