BoxCollider2D

任何的碰撞现象都有两个载体,一个是发起碰撞的,另一个是接受碰撞的,所以我们首先要明确哪些物体是可以接受碰撞的。

碰撞产生的必要条件是

  • 两个物体都有碰撞器

  • 至少有一个物体有刚体

当我们给一个GameObject添加了一个Collider组件之后,就相当于将它在游戏世界中实体化了,它有体积,有位置,可以阻挡同样有体积的物体运动。

刚体会利用体积进行碰撞计算,模拟真实的碰撞效果,产生力的作用

👀️ 刚体对象的子对象碰撞信息参与碰撞检测。

就是说一个父物体是由多个子物体构成,每个子物体都有碰撞体,只需要给父物体添加刚体,那么所有带有父物体的子物体都会参与碰撞

Circle Collider 2D组件

  • Material:物理材质,用于确定碰撞的属性,控制摩擦和弹性

  • Is Trigger:设置该属性后,碰撞体就会变成触发器,当与别的碰撞体发生碰撞后,就把触发OnTriggerEnter2D函数。(如果要触发OnTriggerEnter2D必须要挂载rigidBody2D组件)

  • Used By Effector:是否被附加的2D效应器使用。下文会细说。

  • Offset:圆心偏移位置

  • Radius:圆形的半径

Box Collider 2D组件

  • Used by Composite:结合复合碰撞器使用

  • Auto Tiling:如果将渲染器组件的Draw Mode设置为Tiled平铺模式,勾选它,当改变精灵大小时,会自定更新碰撞器的尺寸

  • Size:矩形的宽高

  • Edge Radius:使四个顶点为圆角。(其他物体碰撞四个角时,有一种往下滑的感觉)

Composite Collider 2D组件

将多个碰撞体合并为一个新的碰撞体。

首先需要一个空物体挂载Composite Collider 2D组件,其子物体的碰撞体必须勾选Used by Composite。

  • Geometry Type:几何学类型,合并碰撞体时,碰撞体顶点将组合为两个不同的几何体类型。

    • Outliness:空心轮廓。类似于一个大的水壶,如果将一个小球放进水壶中,小球很难出来。

    • Polygons:实心多边形。灌满了水泥的水壶,无法把小球放进水壶中

  • Generation Type:生成类型

    • Synchornous:当改变多个碰撞体下的某个碰撞体位置时,Unity会立刻生成新的几何体

    • Manual:只有当点击Regenerate Geometry按钮,才会生成新的几何体

  • Vertex Distance:从复合碰撞器手机顶点时允许的最小间距。

BoxCollider2D类中的Bounds

Bounds代表了物体的外包矩形,也就是包围盒。它是在x、y、z三个方向上的长度,代表了物体的大小。这个包围盒可以用于检测物体之间的碰撞。

public Collider2D gameArea;

// 获取这个碰撞体的区域

Bounds bounds = gameArea.bounds;

2D物体材质

  • Friction:摩擦系数,为0表示没有摩擦力

  • Bounciness:反弹程度。0表示没有弹力,1表示完美弹力(没有能量损失,一直弹)

恒定力

  • Force:物理更新时施加于2D刚体上的线性力

  • Relative Force:物理更新时施加的线性力(相对于刚体对象坐标系)

  • Torque:物理更新时施加2D刚体的扭矩力

效应器

2D效应器配合2D碰撞器一起使用,可以让游戏对象在相互接触时产生一些特殊的物理作用力

类似:传送带、互斥、吸引、漂浮、单向碰撞等等效果

Area Effector 2D区域效应器

注意:必须有碰撞体,并且勾选了触发器

在一个区域内让游戏对象受到力和扭矩的作用

  • Use Collider Mask:勾选它后,会通过Collider Mask来选择指定层,决定效应器只会作用于那些层的对象

  • Use Global Angle:勾选它后,使用世界坐标系下的角度

  • Force Angel:施加力的角度

  • Force Magnitude:施加力的大小

  • Force Variation:施加力的随机大小变换

  • Force Target:效应器在目标对象的作用点

    • Collider:以碰撞器的当前位置

    • Rigiboody:以刚体的当前质心

关节

### 铰链关节

* 铰链关节由两个刚体组成,约束它们像连在一个铰链上一样运动,适用于门,不过对于典型的链子、钟摆等同样适用。

* 添加该组件前必须先添加Box Collider、Rigidbody两个组件

| 属性: | 功能: |

| ---------------- | -------------------------------------------------------------- |

| Connected Body | 对关节所依赖的刚体的引用(可选)。如果未设置,则关节连接到世界 |

| Anchor | 连接体围绕摆动的轴位置。该位置在局部空间中定义。 |

| Connected Anchor | 手动配置连接锚点位置。 |

| Spring | 在启用 Use Spring 的情况下使用的弹簧的属性。 |

### 1. 关门和开门

* 使用弹性

![image.png](/upload/2022/10/image-396707bf37dc447e9cc518bb30ce8198.png)

* 使用马达

![image.png](/upload/2022/10/image-c83df8a1f8be4376be557574f346b3af.png)

### 2. 把门撞飞效果

```language

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

/// <summary>

/// 撞门

/// </summary>

public class DoorForce : MonoBehaviour

{

private void OnCollisionStay(Collision collision)

{

if(collision.collider.tag == "Door")

{

collision.rigidbody.AddForce((Vector3.forward + Vector3.up) * 500);

}

}

}

```

### Fixed Joint

### Spring Joint 弹性关节

布料