Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

Cave设计得易于学习,但仍有一些重要的概念需要你理解。

本课将解释你在编辑器中随处可见的核心术语:scene(场景)、entity(实体)、component(组件)、asset(资源)、entity template(实体模板)、transform(变换)、rigid body(刚体)、character component(角色组件)、Python component(Python组件)、logic brick(逻辑积木)、timeline(时间轴)和runtime(运行时)。

这是一个顶层概览,不会深入讲解每个词的具体细节,但开始掌握这些术语对理解引擎非常重要。一旦这些词语明白了,理解引擎的其他部分也会容易得多。

大体框架

大多数Cave项目是由一些重复的概念构建而成:

概念 简单含义
Scene 一个关卡、菜单、测试区或可玩的空间。
Entity 场景中的一个对象。
Component 附加到实体上的功能。
Asset 存储在资源浏览器中的可复用项目内容。
Entity Template 可复用的实体配置,类似于预制体(prefab)。

举例来说,想象关卡中的一个木箱:

image.png

  • 这个关卡是一个Scene
  • 放置在关卡中的木箱是一个Entity
  • 木箱的位置储存在它的Transform中。
  • 可见模型由Mesh Component管理。
  • 碰撞由Rigid Body Component处理。
  • 木箱所用的模型、材质和纹理是Assets

如果想在多个场景中重复使用该木箱搭建,可以将其保存为Entity Template

Scene(场景)

场景是实体的集合。

场景可以用于:

  • 游戏关卡。
  • 菜单。
  • 测试地图。
  • 原型房间。
  • 剧情过场空间。

主3D视图中只编辑当前激活的场景。测试游戏时,Cave会将场景作为游戏进行运行,而非仅作为编辑器内容。

导出或测试项目运行时,项目设置决定启动场景。你可以在Settings Tab中更改该设置。

Entity(实体)

实体是场景中的对象。

实体可以是可见的,也可以是不可见的。它们可以简单也可以复杂。

实体示例:

  • 玩家角色。
  • 门。
  • 摄像机。
  • 灯光。
  • 触发器。
  • UI按钮。
  • 生成点。
  • 用于组织的文件夹。

实体本身多为容器,其功能取决于附加的组件。

Component(组件)

组件为实体增添行为或数据。

Cave没有为每种可能的对象建造庞大单一类型,而是允许你通过组合组件来构建实体。这也是你构建游戏中不同元素的方法,即通过多个不同组件类型组合实体。

例如:

实体 可能的组件
静态墙壁 Transform、Mesh、Rigid Body。
玩家 Transform、Character、Camera、Python。
Transform、Mesh、Rigid Body、Python或Logic Bricks。
点光源 Transform、Light。
UI按钮 UI Element。

这是Cave中最重要的思想之一:实体是容器,组件赋予其功能。

同样重要的是,另一种构造不同对象类型的方法是通过子实体层级中多个实体的组合。

实体命名

新建实体时,Cave提供不同起始类型,如Folder、Empty、Mesh、Point Light、Camera、UI Element、Text和Button。

这些类型并非完全独立,只是便于起步的起点。

例如:

  • Empty是带变换的基础实体。
  • Mesh实体预设用于显示网格。
  • Point Light实体预设用于表现灯光行为。
  • Camera实体预设用于渲染视图。
  • Folder实体主要用于组织。

通常,你可以后续添加、移除或编辑组件,起始类型仅为快捷方便。

Transform(变换)

变换告诉Cave一个实体的位置和朝向。

包括:

  • 位置
  • 旋转
  • 缩放

几乎所有场景实体都有变换,因为多数对象需存在于世界中的某处。用操控器移动、旋转或缩放实体即是在编辑其变换。实体作为父实体的子实体时,变换相对于父实体层级进行计算。

Asset(资源)

资源是存储在资源浏览器中的可复用项目内容。需要说明的是,尽管实体内部也被视为资源,但资源和实体并不完全相同。

例如:

  • 网格资源是模型数据,网格实体是场景中使用此网格资源的对象。
  • 材质资源定义材质外观,网格实体引用该材质。
  • Python脚本资源包含代码,Python组件可以使用该脚本。

这种分离带来强大优势,因为一份资源可多次重用。若10个箱子使用同一材质,修改材质资源即可同时更新它们全部。

Entity Template(实体模板)

实体模板是可复用的实体配置。见下图。实体模板资源在缩略图下方带有绿色线条标记:

image.png

如果你使用过其他引擎,可以理解为类似于预制体(prefab)。

实体模板可以存储:

  • 实体层级。
  • 组件。
  • 组件设置。
  • 资源引用。
  • 子实体。

这对任何想要复用的内容都很有用:

  • 敌人。
  • 拾取物。
  • 门。
  • 道具。
  • 载具。
  • UI组件。
  • 游戏对象。

不必重复构建同样对象,创建一次实体模板,所需处放置其实例即可。

Rigid Body(刚体)

刚体赋予实体物理行为。当对象需要碰撞或物理运动时使用。

例如:

  • 阻挡玩家的箱子。
  • 可以滚动的球。
  • 带碰撞的门。
  • 玩家无法穿过的墙壁。

刚体属于引擎的物理系统部分,需对象与世界物理交互时使用。

Character Component(角色组件)

角色组件用于角色类运动。这不同于普通刚体,因为角色通常需要特殊行为:

  • 行走。
  • 沿墙滑动。
  • 斜坡处理。
  • 跳跃。
  • 响应玩家输入。

对于玩家或NPC,通常角色组件是比用基本物理对象模拟角色更好的起点。

说到Cave中的角色组件,指的是其角色物理,而非游戏中特定逻辑(如运动等)。

标签和属性

标签和属性帮助你识别和配置实体。

  • 标签是脚本或逻辑用来查找和分类对象的标识。
  • 属性是在编辑器中可编辑的值,让你无需每次重写代码即可调整行为。

例如,敌人可能有如下属性:

  • 行走速度。
  • 生命值。
  • 攻击距离。
  • 巡逻目标。

合理使用属性让游戏调试更方便。

属性不限于实体:场景、逻辑积木和其他资源也可拥有属性。

我们说的Cave中的属性,特指能通过Python字典在代码中访问的属性,这类属性几乎总是在编辑器中可用。

Python Component(Python组件)

Python组件让实体运行Python逻辑。

适用于你想定制行为的场合,例如:

  • 开门。
  • 移动平台。
  • 处理玩家输入。
  • 生成对象。
  • 更新UI文本。
  • 触发事件。

Python组件是Cave中编写游戏玩法的主要方式之一。

Python Code Component(Python代码组件)

当代码直接存储在组件中而非作为独立脚本资源链接时使用。这适合快速测试、小型行为或原型开发。

对于较大的游戏系统,独立Python脚本资源通常更易于组织和复用。

Logic Brick(逻辑积木)

逻辑积木是构建逻辑的可视化方法。当你想在不直接编写Python代码时使用。

如果你知道Unreal的蓝图系统(Blueprints),逻辑积木类似:通过视觉连接逻辑,而不是编写文本。

它们特别适合创建任何你想要的行为,无需写Python代码。比如:游戏事件与逻辑、对象行为、系统连接、触发器等。

你将在本指南后续部分学习它们。

Timeline(时间轴)

时间轴是用于设计序列的资源。它们能随时间动画或触发事件。

用途包括:

  • 剧情过场。
  • 摄像机移动。
  • 脚本化事件。
  • 协调的游戏玩法序列。

不是每个游戏都必须用到时间轴,但当你需要特定次序完成某些行为时很有用。

重要:时间轴不是单独动画编辑的工具,如编辑角色行走循环动画。此类操作需使用专门的DCC软件,如Blender,然后导入Cave。

Player和Game Runtime(运行时)

  • Cave Editor是你构建项目的地方。
  • Cave Player是运行游戏的运行时。

按下编辑器中的播放,Cave会在编辑器内以游戏模式运行你的场景。作为独立运行时测试时,Cave会启动一个独立的Player窗口来运行游戏。

最终导出的游戏以玩家/运行时构建的形式运行,而不是作为编辑器运行。这种区分很重要,因为有些功能仅在编辑器中使用(供您调试和/或开发项目),而其他功能是实际游戏的一部分。

最重要的关系

如果您只记住本课的一个重点,那就是:

一个 Scene 包含多个 Entities,Entities 包含多个 Components,而 Components 通常会使用 Assets。

这就是 Cave 项目的核心结构。