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. 关门和开门
* 使用弹性

* 使用马达

### 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 弹性关节
评论区