1、碰撞器和触发器
碰撞器
1、编辑碰撞器
2、选中触发器
1.1、碰撞的条件
- 两个物体都要带有碰撞器
- 其中一个带有刚体
生命周期
{
// 进入碰撞器调用一次
void OnCollisionEnter2D(Collision2D collision) {
}
// 离开碰撞器
void OnCollisionExit2D(Collision2D collision) {
}
// 碰撞期间, 调用多次
void OnCollisionStay2D(Collision2D collision) {
}
}
1.2、触发条件
2个物体 其中一个的碰撞器必须是勾选了 "是否触发"的这个选项
生命周期
{
// 进入触发器
void OnTriggerEnter2D(Collider2D collision) {
}
// 离开触发器
void OnTriggerExit2D(Collider2D collision) {
}
// 连续调用多次触发器
void OnTriggerStay2D(Collider2D collision) {
}
}
2、物理材质
2D物理材质
摩擦力和反弹力
3、效果器
3.1、表面效果器(Surface Effector 2D
)
表面效果器
使用表面效果器需要在盒碰撞器中选择
Used By Effector
其中三个选项可以选择
Speed
、Speed Variation
、Force Scale
3.2、区域效果器(Area Effector 2D
)
区域效果器
Force Magnitude
表示对物体施加的力Force Angle
对物体施加力的角度
3.3、浮力效果器(Buoyancy Effector 2D
)
浮力效果器
模拟流体行为,包括浮动和阻力相关的设置
Density
:流体的密度,密度越大,碰撞体会下沉;密度越小,碰撞体会上浮。密度与流体相同的碰撞体会浮在流体中。SurfaceLevel
:定义浮力流体的表面位置,对象高于此线时,不会对其施加浮力,低于或相交时会施加浮力。Linear Drag
:影响对象在水中移动的阻力系数。Angular Drag
:影响对象在水中旋转的阻力系数。Flow Angle
:流体流动方向相对世界空间的角度,沿指定方向施加浮力。Flow Magnitude
:与Flow Angle结合使用,决定浮力的大小。Flow Variation
:随机改变流体力的值
3.4、2D点效果器(Point Effector 2D
)
施加力以吸引或排斥一个点。
Force Magnitude
要施加的力的大小。(负数为吸引,正数为排斥)
Distance Scale
应用于源和目标之间距离的缩放。在计算此距离时,按该比值对距离进行缩放,因此可以改变有效距离,从而控制施力的大小。
Force Variation
要施加的力的大小变化。
Force Source
力源是吸引或排斥目标对象的点。从该点定义相对于目标的距离。
Force Target
作用力目标 (Force Target) 是目标对象上由效应器施力的点。从该点定义相对于源的距离。
Force Mode
如何计算力。
4、2D其他物理碰撞器与恒力组件
4.1、多边形碰撞器(Edge Collider 2D
)
多边形
通过鼠标点击线段包裹碰撞的物体
4.2、恒力(Constant Force 2D
)
恒力组件
Force
每次物理更新时施加于 2D 刚体的线性力Relative Force
每次物理更新时施加的线性力(相对于 2D 刚体坐标系)。Torque
每次物理更新时施加于 2D 刚体的扭矩。
5、脚本与刚体的交互
public class Player : MonoBehaviour{
Rigidbody2D r2;
void Start(){
r2 = transform.GetComponent<Rigidbody2D>();
}
void Update(){
float x = Input.GetAxis("Horizontal");
float y = Input.GetAxis("Vertical");
if (x != 0 || y != 0) {
r2.velocity = new Vector2(100 * x, 100 * y);
}
}
}