Keep your place in this quest

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

Cave 是设计得简单易学的,但它仍然有一些重要的概念需要你理解。

本课将解释你将在编辑器中随处可见的核心词汇:场景、实体、组件、资源、实体模板、变换、刚体、角色组件、Python 组件、逻辑砖、时间线和运行时。

这是一个顶层概述,并未深入每个单词的具体意义,但理解这些词汇对提高你对引擎的理解非常重要。一旦这些词汇对你来说有意义,引擎的其他部分也会变得更容易理解。

大局观

大多数 Cave 项目都是由几个重复的概念构建的:

概念 简单解释
场景 一级、菜单、测试区域或可玩空间。
实体 场景中的一个对象。
组件 附加到实体的特性。
资源 存储在资源浏览器中的可重用项目内容。
实体模板 一种可重用的实体设置,类似于预制体。

例如,想象一个关卡中的木箱:

image.png

  • 这个关卡是一个 场景
  • 放置在关卡中的箱子是一个 实体
  • 箱子的位置存储在它的 变换 中。
  • 可见模型由 网格组件 处理。
  • 碰撞可以由 刚体组件 处理。
  • 箱子使用的模型、材质和纹理是 资源

如果你想在多个场景中重用那个箱子设置,你可以将其保存为一个 实体模板

场景

场景是实体的集合。

场景可以用于:

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

只有活动场景在主 3D 视图中被编辑。当你测试游戏时,Cave 会将场景作为游戏而运行,而不仅仅是编辑器内容。

在导出或作为运行时测试项目时,项目设置决定哪个场景被用作启动场景。你可以通过转到 设置标签 来更改它。

实体

实体是场景中的一个对象。

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

实体的例子:

  • 玩家角色。
  • 一扇门。
  • 一个相机。
  • 一盏灯。
  • 一个触发器。
  • 一个 UI 按钮。
  • 一个生成点。
  • 用于组织的文件夹。

实体本身大多是一个容器。它实际能够做什么取决于附加的组件。

组件

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

Cave 允许你通过组合组件来构建实体,而不是为每种可能的东西定义一个巨大对象类型。这正是你应该构建游戏不同元素的方式,通过将多个不同类型的组件组合到实体中。

例如:

实体 可能的组件
静态墙 变换、网格、刚体。
玩家 变换、角色、相机、Python。
变换、网格、刚体、Python 或逻辑砖。
点光源 变换、灯。
UI 按钮 UI 元素。

这是 Cave 中最重要的理念之一:实体是容器。组件赋予它们特性。

这里还需要提到,另一种组合不同对象类型的方法是使用多实体的子实体层次结构。

实体命名

当你创建一个新实体时,Cave 提供了不同的起始类型,如文件夹、空、网格、点光源、相机、UI 元素、文本和按钮。

这些不是完全独立的世界。它们是方便的起始点。

例如:

  • 一个 是一个具备变换的基本实体。
  • 一个 网格 实体是一个准备显示网格的实体。
  • 一个 点光源 实体是一个准备作为光源行为的实体。
  • 一个 相机 实体是一个准备渲染视图的实体。
  • 一个 文件夹 是主要用于组织的实体。

你通常可以在之后添加、删除或编辑组件,因此起始类型只是一个有用的快捷方式。

变换

变换告诉 Cave 实体的位置和方向。

它包括:

  • 位置。
  • 旋转。
  • 缩放。

几乎每个场景实体都有一个变换,因为大多数对象需要在世界中的某个地方存在。当你使用小工具移动、旋转或缩放实体时,你是在编辑它的变换。当一个实体被父级对象附属时,它的变换是相对于该层次结构进行评估的。

资源

资源是存储在资源浏览器中的可重用项目内容。重要的是要提到,虽然实体在内部被视为资源,但资源并不等同于实体。

例如:

  • 一个网格资源是模型数据。一个网格实体是放置在场景中使用该网格资源的对象。
  • 一个材质资源定义了表面的样式。一个网格实体可以引用该材质。
  • 一个 Python 脚本资源包含代码。一个 Python 组件可以使用那个脚本。

这种分离是强大的,因为一个资源可以被多次重用。如果十个箱子使用相同的材质,编辑材质资源可以同时更新它们。

实体模板

实体模板是一个可重用的实体设置。请查看下面的截图。实体模板资产在缩略图下方用绿色线条标记:

image.png

如果你来自其他引擎,你可以将其视为类似于预制体

实体模板可以存储:

  • 实体层次结构。
  • 组件。
  • 组件设置。
  • 资源引用。
  • 子实体。

这对于你想要重用的任何东西都是有用的:

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

而不是一次又一次地重建相同的对象,你只需创建一次作为实体模板,并在需要的地方放置实例。

刚体

刚体赋予实体物理行为。它用于需要碰撞或物理运动的对象。

例子:

  • 一个阻挡玩家的箱子。
  • 一个可以滚动的球。
  • 一扇有碰撞的门。
  • 一堵不能被玩家穿过的墙。

刚体是引擎物理部分的一部分。当对象需要与世界进行物理交互时,你将使用它们。

角色组件

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

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

对于玩家或 NPC,角色组件通常是比试图让基本物理对象作为角色工作更好的起点。

当我们谈论 Cave 中的角色组件时,我们是指其角色物理,而不是特定于游戏的逻辑(例如运动等)。

标签和属性

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

  • 标签是一个可以帮助脚本或逻辑查找和分类事物的标签。
  • 属性是面对编辑器的可编辑值。它们让你调整行为,而无需每次都重写代码。

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

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

良好的属性使用使你的游戏更易调整。

属性不仅限于实体:场景、逻辑砖和其他资产也可以具有属性。

当我们在谈论 Cave 中的属性时,我们具体指的是可以通过代码使用 Python 字典访问的属性。它们几乎总是也在编辑器中可用。

Python 组件

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

这在你想要自定义行为时非常有用,例如:

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

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

Python 代码组件

Python 代码组件用于代码直接存储在该组件中,而不是作为单独脚本资产链接。这在快速测试、小型行为或原型时非常有用。

对于较大的游戏玩法系统,单独的 Python 脚本资产通常更容易组织和重用。

逻辑砖

逻辑砖是构建逻辑的一种可视化方式。它们在你想要无需直接编写 Python 代码的情况下很有用。

如果你了解 Unreal 的蓝图,逻辑砖在类似的思想家族中:你以可视化的方式连接逻辑,而不是将所有内容编写为文本。

它们特别有用,以便创建你想要的任何逻辑,而无需撰写 Python 代码。例如,游戏行为和逻辑、对象行为、连接系统、触发器等。

你将在本指南中稍后学习它们。

时间线

时间线是用于创作序列的资产。时间线可以随着时间的推移动画或触发事物。

它们对于:

  • 剧情。
  • 相机移动。
  • 脚本事件。
  • 协调的游戏序列。

时间线并不是每个游戏所必需的,但在你希望某些事情按照特定创作顺序发生时,它们很有用。

重要提示: 时间线不是用于单个动画编辑的手段,例如为你的角色编辑行走循环动画。在这种情况下,你必须使用专门的 DCC 软件,如 Blender,然后将其导入到 Cave。

玩家和游戏运行时

  • Cave 编辑器是你构建项目的地方。
  • Cave 玩家是运行游戏的运行时。

当你在编辑器中按“播放”时,Cave 在编辑器内以类似游戏的模式运行你的场景。当你作为独立运行时测试时,Cave 在一个单独的玩家窗口中启动游戏。

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

最重要的关系

如果您只记住这节课的一件事,请记住这一点:

一个场景包含实体,实体包含组件,而组件通常使用资产。

这就是 Cave 项目的基础。