一、Game Object

1、什么是Game Object

游戏中的万物皆为游戏对象(Game Object,GO),包括静态(房子)、动态(人)、环境(天空、树)、其他GO(检测体、空气墙)等。构建一个游戏世界,就是要管理好这些GO。

2、GO的属性

一个GO可以定义为一个类,其属性(Property)和行为(Behavior)对应了类中的成员变量和成员函数。这个很easy。进一步,我们可以建立父类,由父类派生不同类型的子类,继承关系便是面向对象编程的基础。

 然而游戏世界的定义一个GO并不是单纯一个继承的关系,一个子类可能同时拥有多个父类的特点,如何实现这个GO的定义,便成了关键。

一个最经典的解决方法便是:组件化。把一个GO的行为拆分成多个组件。如下图,一个无人机的对象,我们可以拆卸成为多个组件,当这些组件组合在一起,便是我们需要的GO,同样的我们也可以通过增删改组件来建立相似但是不同的GO。

二、 Object-based Tick vs. Component-based Tick

当前一Tick内的执行方式主要分为两种,一种是基于对象,即在一Tick内一个GO的所有组件都执行完再执行下一个GO的组件,这种方式更简便而且更易于DEBUG;另一种是基于组件的,即将不同GO的相同组件并行执行,加快了效率同时减少了缓存的丢失,当今的游戏引擎的执行策略多以第二种为主。

三、Event

在过去的游戏设计中,GO与GO之间的交互是采用HardCode的方式进行的,例如一个炮弹爆炸,在爆炸的函数中就要求遍历出所有可能与“爆炸”这个行为相关联的对象,再去对那个对象进行修改。而如今GO越来越复杂的情况下,这种编写方式不再work,从而出现了一种Event的机制来解决这个问题。

Event机制,是一种消息传递的机制,一个GO的行为会产生一个事件,将这个事件传递给其他GO,其他GO再去处理。以刚才举的例子来说,炮弹爆炸产生一个爆炸事件,这个事件传递给周围对象,周围的对象在下一个Tick接收到这个event,同时进行对应的行为。

四、管理GO

一个事件产生就需要传递,传递给哪些GO变成了问题,所以我们需要去管理所有的GO。 最简单的方式就是不管理,当一个事件产生就发送给所有的GO,做一个小游戏的时候这样是没用问题的,但是当GO越来越多,这样明显是灾难性的。

那么最简单的管理方法就是将区域划分成层级结构,上图举了一个四叉树的例子,将区域按层级划分成四块,按层级查询便可以快速得到想要的结果。同时,这种层级结构也分为不同的流派,比如八叉树、BSP(二进制空间划分)以及最常见的BVH等。

五、其他复杂情况

一个游戏场景中的GO都是在行动的,会有大量event发送和接收,如果是单线程运行,什么时候发送什么时候接收是没用问题的。但是现在的游戏是多线程并行执行的就可能产生一些时序问题。例如辆车相遇,A发送信号让B停,B发送信号让A停,由于是并行的,两个event并不是同时发出的,到底是A先停还是B先停还是同时停整个时序是混乱的,如果一个场景中大量存在这种时序混乱,则大大降低了整体的运行效率。所以提出了一种“邮局”作为中介的方法,所有的Event要求先传递给“邮局”,邮局在下一个Tick同时发送给对应的GO,这样解决当前的时序混乱的问题。

【Games104】 如果构建游戏世界相关推荐

  1. GAMES104实录 | 如何构建游戏世界(上)

    本期为GAMES104<现代游戏引擎:从入门到实践>视频公开课文字实录第8期.本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发. 课程共 ...

  2. Games104-03如何构建游戏世界

    Games104-03如何构建游戏世界 怎样去构建一个游戏世界? 一个游戏世界由以下部件组成 怎样构建一个动态的世界? 怎么样实现世界中各物体的交互? 怎样去管理世界中的GameObject? Sce ...

  3. GAMES104-如何构建游戏世界

    游戏都有啥? 可交互的动态游戏物体(Dynamic Game Object) 静态物体(Static Game Object) 环境,地形系统(Sky+Vegetation+Terrain) 其他物体 ...

  4. Games104 Lecture 3 如何构建一个游戏世界

    如何构建一个游戏世界 游戏世界组成 应该包含哪些东西 应该如何描述这些东西 应该如何被组织起来 怎样让游戏世界活起来 Tick 如何交互 怎样管理游戏对象 总结 游戏世界组成 构建游戏世界有三个核心问 ...

  5. 【GAMES104】现代游戏引擎笔记目录(更新中……)

    好耶,GAMES又推出新课程!听第一节课就被老师的热情感染了!! 此后更新的课程笔记将放在本文作为索引.笔记将结合课程内容和参考书<游戏引擎架构 第二版>书写,并将在直播之后的两个工作日内 ...

  6. Games104现代游戏引擎入门-lecture3如何构建一个游戏世界

    Games104现代游戏引擎入门-lecture3如何构建一个游戏世界 1 游戏世界的构成 2 无人机案例 3 游戏世界如何动起来 4 如何探索 5 如何管理GO 6 总结 7 Q&A 1 游 ...

  7. Unity3D 游戏引擎之构建简单的游戏世界(三)

    Unity3D 游戏引擎之构建简单的游戏世界 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archi ...

  8. 设计渲染系统,为什么要特别关注“显卡”? | GAMES104实录 - 现代游戏引擎:从入门到实践

    本期为GAMES104<现代游戏引擎:从入门到实践>视频公开课文字实录第11期.本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发. 课程 ...

  9. 理解绘制系统,记住四点就够了 | GAMES104实录 - 现代游戏引擎:从入门到实践

    本期为GAMES104<现代游戏引擎:从入门到实践>视频公开课文字实录第13期.本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发. 课程 ...

最新文章

  1. mysql主从复制实战
  2. c语言p1-melepeo,学生选课系统c语言程序代码
  3. 解决用户登录查库问题
  4. linux常用命令和选项
  5. 本田crv混动操作手册_【广汽本田】不只是奶爸车 新出行试驾本田奥德赛锐混动...
  6. html得到上传文件类型后缀,js获取上传文件后缀名(附js提交form表单)
  7. sql注入pythonpoco_骑士CMS后台SQL注入 | CN-SEC 中文网
  8. R语言与机器学习学习笔记(分类算法)
  9. 最新Tuxera NTFS for mac2020读写NTFS磁盘工具 更新详情介绍
  10. java编程新手自学手册_Java Web编程新手自学手册
  11. Python整理PEER所下载的地震波源数据——提取地震波至txt+生成地震波反应谱
  12. JS 判断字符串是否为空
  13. 计算机是好是坏英语作文,电脑游戏是好还是坏英语作文
  14. MJB,阿里又一次成功的营销?
  15. 第二章 进程的描述与控制【操作系统】
  16. 小学和初中计算机的图案,信息技术和小学数学“图形和几何”的有效融合
  17. Android新浪微博分页加载,Android仿新浪微博自定义ListView下拉刷新(4)
  18. Qt组件-QLabel
  19. MySQL中针对SQL语句优化
  20. 菜鸡记录之初试自动更新,源码及出现的问题

热门文章

  1. Unity-ArrayList,List,HashTable,Dictionary
  2. 《可复制的领导力:樊登的9堂商业课》-樊登 读书笔记
  3. iOS 手机照片上传服务器方向不对的原因以及解决方法
  4. 刚破了潘金莲的身份信息(图片文字识别),win7、win10实测可用(免费下载)
  5. Vue3-Pinia(小菠萝)使用详解
  6. JS中的CommonJS和AMD
  7. python交易是什么意思_Py交易是什么意思?Py交易是什么梗?
  8. web前端html5+css3学习笔记(1)
  9. Oracle 19c升级路径与QA
  10. 提高php代码质量 36计