> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-zh/3d-jian-mo-he-dong-hua/colliders.md).

# 碰撞体

了解如何为导入到 Decentraland 的 3D 模型添加碰撞体。

要让 3D 模型与场景中的用户之间发生碰撞，你必须为模型添加碰撞器。没有碰撞器，玩家就可以像它们不存在一样穿过模型。碰撞器也是对象响应玩家指针事件或阻挡这些事件、或者被射线检测命中或阻挡射线检测所必需的。出于性能原因，碰撞器通常会单独建模为更简单的不可见几何体，其顶点数少于可见几何体。

{% hint style="info" %}
**💡 提示**: 安装 [Decentraland Tools Blender 插件](https://extensions.blender.org/add-ons/decentraland-tools/)。它包含一些实用功能，可帮助你编辑和导出 3D 模型、穿戴物和表情动作。
{% endhint %}

该模型可以使用不可见几何体作为碰撞器，或者（从 SDK7 开始）你也可以直接将可见几何体指定为碰撞器。参见 [**3D 模型上的碰撞器**](https://docs.decentraland.org/creator/development-guide/sdk7/colliders/#colliders-on-3d-models) 。你也可以为不同几何体分配不同的碰撞层，以分别控制玩家物理、指针事件以及其他自定义层，参见 [**3D 模型上的碰撞器**](https://docs.decentraland.org/creator/development-guide/sdk7/colliders/#collision-layers) .

碰撞器不会影响模型和实体之间的交互，它们总是可以重叠。碰撞器只会影响模型与玩家头像的交互。

要让一个对象在 Decentraland 场景中被识别为碰撞器，只需以特定方式命名即可。对象名称末尾必须包含后缀 “\_collider”。

例如，要为路灯创建碰撞器，你可以创建一个包围其杆身的简单盒子对象。场景中的玩家不会看到这个盒子，但它会阻挡他们的路径。

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-0d12445032edb8460857129dfe4a6c0d755b79be%2F25-collider.png?alt=media)

在这种情况下，我们可以将盒子命名为 “LampPost*collider”，并将树和盒子一起导出为一个 \_\_gltf 模型。\*\_\_collider*\* 标记会告知 Decentraland 世界引擎，该盒子对象属于碰撞器集合，从而使碰撞网格不可见。

无论何时玩家在你的场景中查看路灯模型，他们看到的都会是路灯的复杂模型。然而，当他们走进去时，碰到的会是盒子，而不是树。

## 玩家空间限制

当你设计供玩家在其中行走的模型时，需要牢记以下参考尺寸：

* 玩家无需跳跃即可走上最高 30 厘米的台阶
* 玩家无需跳跃即可走上坡度最高 45 度的斜坡
* 玩家可跳起最高 1.8 米
* 头像身高约为 1.9 米，但要考虑他们头上可能戴着帽子或其他穿戴物。

无论何时玩家在你的场景中查看树模型，他们看到的都会是树的复杂模型。然而，当他们走进你的树时，碰到的会是盒子，而不是树。

### 为楼梯添加碰撞器

楼梯是碰撞器对象非常常见的用例。为了让玩家能够爬楼梯，必须有一个对应的 \_collider 对象，供玩家踩踏。

我们建议为楼梯碰撞器使用坡道对象，这样在上下楼梯时体验会好得多。当他们爬上你的楼梯时，看起来会像平滑地上升或下降，而不需要他们逐级“跳”上每一步。

使用坡道对象还能避免创建不必要的几何体，为其他更复杂的模型节省空间。请记住，在计算时也会将碰撞器几何体考虑在内 [**场景限制**](https://docs.decentraland.org/creator/development-guide/scene-limitations/)

1. 创建一个坡道形状的新对象，使其大小和比例与原始楼梯相似。

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-680fdc067ef8fcd1c4d80d31710709b558e7c067%2F26-collider-2.png?alt=media)

2. 将坡道对象命名为类似于 S*tair\_collider*。其结尾必须是 \_*碰撞体*.
3. 将坡道对象覆盖到楼梯上，使它们占据同一空间。

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-71a830ef0313ecf3d6b5232ecc2e742ce5bdc46a%2F27-collider.png?alt=media)

4. 将两个对象一起导出为一个 *glTF* 模型。

现在，当玩家在你的场景中查看楼梯时，他们看到的是更精细的楼梯模型，但当他们爬楼梯时，碰到的会是坡道。

## 优化碰撞器

* 优先使用 **Box**, **Sphere** 和 **Capsule** 碰撞网格，因为这样在加载和运行时的性能更好。
* 可以考虑用多个原始碰撞网格（**Box**/**Sphere**/**Capsule**)

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-8f2976bacdcec721dd9dc34b023f2e006f33e4d7%2F28-optimizing-colliders.png?alt=media)

*示例：Ring 的碰撞器可以由多个 Capsule 或 Box 碰撞器组成*

* 将碰撞网格放在与其相关对象的层级结构中。例如，从层级结构的角度看，Spaceship\_collider 可以作为 Spaceship 父对象中的子对象

### 凸形与凹形碰撞器

如果唯一的选择是使用任意网格碰撞器，那么请将碰撞网格做成凸形（而不是凹形）。这可以防止奇怪的物理情况，例如卡顿、卡在碰撞器内部或穿过去。注意，通常可以用多个凸网格来模拟凹网格。

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-33cc04ac9bf25f8d342724d7a4760b78a48bcabf%2F29-convex-collider.png?alt=media)

## 碰撞命名

**使用有意义的名称。名称应能体现该资源用于何处，或它关联对象的哪个部分。**

在资源命名中，我们混合使用 `PascalCase` 和 `snake_case`，我们可以称之为 `PascalSnake_case`。基本规则如下——新词或分隔符（`_`）后面的词以 **大写字母开头。**

Collision Mesh 是在 Explorer 中创建碰撞器时用作参考的网格

* 它遵循与上面的 Meshes 相同的原则，但在 `_collider` 末尾有后缀 **示例：** 🟢 **建议** 名称 - `Tram_Wheel_LeftFront_collider` 🔴 **避免** 名称 - `Primitive.001_Collider`, `collider (1)`, `Cylinder.007_collider`,

{% hint style="warning" %}
**🔥优化提示🔥**

如果碰撞器可以用 Box、Sphere 或 Capsule 形状近似，那么请使用额外后缀，并在这三种可选变体中选择一种：\_box、\_sphere 或 \_capsule。使用这三种形状而不是任意网格进行碰撞检测，将提升你的场景性能和加载时间 💪🚀

示例：🟢 Teater\_MainWall\_North\_collider\_box, Fountain\_Statue\_collider\_sphere
{% endhint %}

## 碰撞器最佳实践

* **创建碰撞器时始终尽可能使用最少的三角形。** 避免复制复杂对象作为碰撞器使用。简单的碰撞器能够保证良好的用户体验，并使你的场景保持在三角形限制内。
* **碰撞器对象不应具有任何材质**，因为你场景中的玩家永远看不到它。碰撞器对玩家是不可见的。
* **所有碰撞器对象名称都必须以 \_ 结尾*****碰撞体*****.** 例如，T*ree\_collider*.
* **如果你使用 \_plane**\_\*\* 作为碰撞器，它只会在一个方向上阻挡。\*\* 如果你希望碰撞器能从两侧阻挡，例如用于墙壁，你需要创建两个平面，并让它们的法线朝向相反方向。
* 复制碰撞器对象时，要注意它们的名称。某些程序会在文件名末尾附加一个 \_*1* ，以避免重复，例如 *tree\_collider\_1*。以这种方式命名的对象会被 Decentraland World Engine 解释为普通对象，而不是碰撞器。
* 如果你添加一个不可见的 `MeshCollider` 组件到实体中，用它来近似 3D 模型的形状，那么就可以避免添加碰撞网格。
* 如果你配置 `GLTFContainer` 组件使用可见几何体作为碰撞器，也可以避免添加碰撞网格。参见 [**3D 模型上的碰撞器**](https://docs.decentraland.org/creator/development-guide/sdk7/colliders/#colliders-on-3d-models) .
* 如果你正在创建一个包含许多网格形状且每个都需要碰撞器的 3D 模型，有一些实用的插件可以帮上忙。对于 Blender，你可以使用 Blender 中的批量重命名选项\*\*\*\*，以自动添加一个 `_collider` 后缀到组内所有网格名称中。关于此工具的更多内容见“**使用 Blender 重命名资源”部分**


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-zh/3d-jian-mo-he-dong-hua/colliders.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
