> 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-yu-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\&token=dcb5f7c4-be34-4523-81f8-e2773196a24d)

在这种情况下，我们可以将盒子命名为“LampPost*collider”，并将树和盒子一起导出为一个 \_\_gltf 模型。The \*\_\_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\&token=e197970c-6e79-412d-b480-7a0ebeef8ba3)

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\&token=e25bc179-b5e7-4702-ac25-4ebc891a04dd)

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

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

## 优化碰撞体

* 优先使用 **盒体**, **球体** 和 **胶囊体** 碰撞网格，因为这样在加载时和运行时都会有更好的性能。
* 考虑用多个基础碰撞网格来近似复杂的碰撞网格（**盒体**/**球体**/**胶囊体**)

![](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\&token=81bcf3dd-540e-4baf-817f-e3df19a890f7)

*例如：戒指的碰撞体可以由多个胶囊体或盒体碰撞体组成*

* 将碰撞网格放在其相关对象的层级结构中。例如，从层级的角度看，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\&token=ec3da8ea-0b06-474a-99f3-309e05dbdaba)

## 碰撞命名

**使用有意义的名称。名称应能体现资源的使用位置或其所对应的对象部件。**

对资源命名时，我们混合使用 `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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
