mirror of
https://github.com/galacean/engine.git
synced 2026-07-02 06:34:29 +08:00
112 lines
3.1 KiB
Plaintext
112 lines
3.1 KiB
Plaintext
---
|
|
order: 1
|
|
title: 静态碰撞器
|
|
type: 物理
|
|
label: Physics
|
|
---
|
|
|
|
静态碰撞器([StaticCollider](/apis/core/#StaticCollider))用于创建固定在场景中不会移动的物理对象。它不受物理引擎施加的力的影响,但可以与其他动态物体产生碰撞和触发响应,常用于创建地面、墙壁等静态场景元素。
|
|
|
|
## 使用方法
|
|
|
|
1. 选中目标实体,并在检查器中点击添加组件按钮,添加 StaticCollider 组件。
|
|
|
|
<Image src="https://mdn.alipayobjects.com/huamei_3zduhr/afts/img/A*g5RMQJwnSZsAAAAAAAAAAAAAesJ_AQ/original" />
|
|
|
|
|
|
2. 为碰撞器添加碰撞形状。关于碰撞形状的详细说明请参考[碰撞形状](/docs/physics/collider/colliderShape)文档。
|
|
|
|
<Image src="https://mdn.alipayobjects.com/huamei_3zduhr/afts/img/A*UcaRSb0nahcAAAAAAAAAAAAAesJ_AQ/original" />
|
|
|
|
3. 调整碰撞形状的位置、大小等属性,使其与场景元素匹配。
|
|
|
|
<Image src="https://mdn.alipayobjects.com/huamei_3zduhr/afts/img/A*g5RMQJwnSZsAAAAAAAAAAAAAesJ_AQ/original" />
|
|
|
|
## 属性
|
|
|
|
| 属性 | 描述 |
|
|
| ----------------------------------------- | ------------ |
|
|
| [**shapes**](/apis/core/#Collider-shapes) | 碰撞形状集合 |
|
|
|
|
## 方法
|
|
|
|
| 方法名 | 描述 |
|
|
| --------------------------------------------------- | ---------------- |
|
|
| [**addShape**](/apis/core/#Collider-addShape) | 添加碰撞形状 |
|
|
| [**removeShape**](/apis/core/#Collider-removeShape) | 移除指定碰撞形状 |
|
|
| [**clearShapes**](/apis/core/#Collider-clearShapes) | 清空所有碰撞形状 |
|
|
|
|
|
|
## 脚本使用
|
|
|
|
### 基础配置
|
|
|
|
```typescript
|
|
// 创建静态碰撞器
|
|
const staticCollider = entity.addComponent(StaticCollider);
|
|
|
|
// 添加盒形碰撞形状
|
|
const boxShape = new BoxColliderShape();
|
|
boxShape.size = new Vector3(1, 1, 1);
|
|
boxShape.position = new Vector3(0, 0.5, 0);
|
|
staticCollider.addShape(boxShape);
|
|
```
|
|
|
|
### 形状管理
|
|
|
|
```typescript
|
|
// 获取所有形状
|
|
const shapes = staticCollider.shapes;
|
|
|
|
// 增加形状
|
|
const boxShape = new BoxColliderShape();
|
|
staticCollider.addShape(boxShape);
|
|
|
|
// 移除特定形状
|
|
staticCollider.removeShape(boxShape);
|
|
|
|
// 清空所有形状
|
|
staticCollider.clearShapes();
|
|
```
|
|
|
|
|
|
### 触发器设置
|
|
|
|
```typescript
|
|
// 设置为触发器
|
|
const triggerShape = new BoxColliderShape();
|
|
triggerShape.isTrigger = true;
|
|
staticCollider.addShape(triggerShape);
|
|
|
|
// 添加触发器响应脚本
|
|
class TriggerHandler extends Script {
|
|
onTriggerEnter(other: Collider) {
|
|
console.log("触发器被触发");
|
|
}
|
|
}
|
|
entity.addComponent(TriggerHandler);
|
|
```
|
|
|
|
### 复合形状
|
|
|
|
```typescript
|
|
// 创建L形墙
|
|
function createLWall() {
|
|
const entity = new Entity();
|
|
const collider = entity.addComponent(StaticCollider);
|
|
|
|
// 主墙
|
|
const wall1 = new BoxColliderShape();
|
|
wall1.size = new Vector3(5, 3, 0.5);
|
|
collider.addShape(wall1);
|
|
|
|
// 侧墙
|
|
const wall2 = new BoxColliderShape();
|
|
wall2.size = new Vector3(0.5, 3, 3);
|
|
wall2.position = new Vector3(2.25, 0, 1.25);
|
|
collider.addShape(wall2);
|
|
|
|
return entity;
|
|
}
|
|
```
|