Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

3D 简介

创造一个 3D 游戏很有挑战性。那个多出来的的 Z 轴使许多有助于使 2D 游戏变得简单的常用技术不再起作用。为了帮助习惯这种转变,值得一提的是,Godot在2D和3D上使用了类似的API。大多数节点是相同的,并且存在 2D 和 3D 版本。事实上,可以看看 3D 平台游戏教程或 3D 运动学角色教程,它们大部分与2D对应教程相同。

在3D中, 数学比2D更复杂一些, 所以看看Wiki里的 向量数学 将有助于为有效开发3D游戏铺平道路(它是为游戏开发者, 而不是数学家或工程师, 特别创建的).

Node3D 节点

Node2D 是 2D 的基础节点。Control 是所有 GUI 的基础节点。同理,3D 引擎中的所有 3D 物体都使用 Node3D 节点。

../../_images/tuto_3d1.webp

Node3Ds have a local transform, which is relative to the parent node (as long as the parent node is also of or inherits from the type Node3D). This transform can be accessed as a 3×4 Transform3D, or as 3 Vector3 members representing location, Euler rotation (X, Y and Z angles) and scale.

../../_images/tuto_3d2.webp

3D 内容

与 2D 中加载图像内容和绘图都非常直观相比,3D 就有所不同,会稍微难一些。3D 内容需要使用特殊的 3D 工具(通常称为数字内容创建工具,Digital Content Creation 工具,简称 DCC)来创建,然后导出到某种交换文件格式,才能被 Godot 导入。这是因为 3D 格式的标准化不及图像。

手动制作的模型(使用 3D 建模软件)

有两条管线可以导入 3D 模型到 Godot 中。第一个也是最常见的一个,是通过 导入 3D 场景 , 它允许导入整个场景(就像它们在DCC中看起来的那样),包括动画,骨架绑定,混合形状等。

第二条管线是通过导入简单的 .OBJ 文件作为网格资源,然后将其放入 MeshInstance3D 节点中显示。

生成的几何体

通过直接使用 Mesh 资源可以创建自定义几何体。只需创建数组并使用 ArrayMesh.add_surface_from_arrays() 函数即可。也可以使用辅助类 SurfaceTool,它提供了一个更直接的 API 和帮助工具,用于索引、生成法线、切线等。

在任何情况下, 这种方法都是为了用于生成静态几何体(不会经常更新的模型), 因为创建顶点数组并将它们提交给3D API具有显著的性能开销.

即时几何体

相反,如果你需要生成经常更新的简单几何体,Godot 提供了一种特殊的