17.2D相关-2D物理系统-刚体
17.1 知识点
学习2D物理系统的前提
- 学习2D物理系统之前建议先学习Unity入门当中的3D物理系统,因为它们非常的类似。
- 由于我们之前详细讲解了3D物理系统,所以在讲解2D物理系统时会相对简洁一些,一些讲过的知识点就不过多赘述了。
2D物理系统中的刚体组件
- 刚体是物理系统中用于帮助我们进行模拟物理碰撞中力的效果的。
- 2D物理系统中的刚体和3D中的刚体基本是一样的,最大的区别是对象只会在XY平面中移动,并且只在垂直于该平面的轴上旋转。
2D物理系统中碰撞产生的条件
- 在Unity中,2D物理系统中碰撞产生的条件是:
- 两个物体都必须有Collider 2D组件,用于定义物体的形状和边界。
- 至少有一个物体必须有Rigidbody 2D组件,用于让物体受到物理引擎的控制。
- 两个物体的Layer必须在Physics 2D Settings中设置为可以相互碰撞。
- 两个物体的Collider 2D组件必须有相交或重叠的部分。
- 如果以上条件都满足,那么当两个物体接触时,就会产生碰撞,并触发相应的事件和回调函数,例如OnCollisionEnter2D,OnCollisionStay2D和OnCollisionExit2D。
- 碰撞产生后,物理引擎会根据两个物体的质量,速度,角速度,弹力和摩擦力等属性来计算碰撞的响应,并更新物体的位置和旋转。
- 如果需要自定义碰撞的响应,可以使用Physics Material 2D组件来调整弹力和摩擦力。
Rigidbody2D刚体2D组件参数
Body Type 刚体类型
Dynamic 动态
- 动态类型,受重力和力的影响移动和旋转。
Material 材质
- 物理材质
- 在刚体上设置了物理材质,如果子物体有碰撞器但是没有设置材质则会通用刚体的物理材质。
- 如果不设置,将使用在Physics 2D窗口中设置的默认材质。
- 物理材质的使用优先级:
- 2D碰撞器上指定的2D物理材质。
- 2D刚体上指定的2D物理材质。
- Physics 2D窗口指定的2D默认物理材质。
Simulated 模拟的
- 如果希望2D刚体以及所有子对象2D碰撞器和2D关节都能模拟物理效果,需要启用该选项。
Use Auto Mass 使用自动质量
- 是否使用自动质量。
Mass 质量
- 质量。
Linear Drag 线性阻尼
- 影响位置移动的阻力系数。
Angular Drag 角阻力
- 影响旋转移动的阻力系数。
Gravity Scale 重力大小
- 受重力影响的程度。
Collision Detection 碰撞检测
- 碰撞检测算法。
- Discrete 离散的:离散检测算法,只会用新位置进行计算,速度过快时会穿过。
- Continuous 持续的:连续检测算法,计算量更大,但是不会发生穿过的情况。
Sleeping Mode 休眠模式
- 对象处于静止状态时进入睡眠模式的选择。
- Never Sleep 从不休眠:从不休眠,会一直进行检测计算,性能消耗较大。
- Start Awake 开始唤醒:最初处于唤醒状态。
- Start Asleep 开始休眠:最初处于睡眠状态,但是可以被碰撞唤醒。
Interpolate 插值
- 物理更新间隔之间的插值运算。
- None 无:不应用移动平滑。
- Interpolate插值:根据前一帧进行平滑处理。
- Extrapolate 外推:根据后一帧位置进行平滑处理。
Constraints 约束
- 约束限制,可以让某一个轴不受力影响位移或者旋转。
Info 信息
- 实时的数据信息。
Kinematic 运动
- 运动学类型,不受力的影响,只能通过代码让其动起来。
- 能和Dynamic 2D刚体产生碰撞,但是不会动,只会进入碰撞检测函数
- 因此它没有了质量莫摩擦系数等属性
- 性能能消耗较低,主要会通过代码来处理其移动旋转
Simulated 模拟的
- 如果希望2D刚体以及所有子对象2D碰撞器和2D关节都能模拟物理效果,需要启用该选项。
- 当启用时,会充当一个无限质量的不可移动对象,可以和所有2D刚体产生碰撞。
- 如果Use Full Kinematic Contacts禁用,它只会和Dynamic 2D刚体碰撞。
Use Full Kinematic Contacts 使用完全运动学联系
- 如果希望能和所有2D刚体碰撞,启用它。
- 如果不启用,它不会和Kinematic 2D和Static 2D刚体碰撞。
Static 静态
- 静态类型,完全不动的需要检测碰撞的对象,相当于是无限质量不可移动的对象。
- 它的性能消耗最小,它只能和Dynamic 2D刚体碰撞,和它类似的有只加碰撞器而不加刚体的物体,它们会和刚体物体产生碰撞,但是自己不会动。
如何选择不同类型的刚体
- Dynamic动态刚体:受力的作用,要动要碰撞的对象。
- Kinematic运动学刚体:通过刚体API移动的对象,不受力的作用,但是想要进行碰撞检测。
- Static静态刚体:不动不受力作用的静态物体,但是想要进行碰撞检测。
Rigidbody2D刚体2D代码控制
GetComponent<Rigidbody2D>() 得到2D刚体
//得到2D刚体
Rigidbody2D rigid = this.GetComponent<Rigidbody2D>();
Rigidbody2D.AddForce方法 加力
//加力
rigid.AddForce(new Vector2(0, 100));
Rigidbody2D.velocity属性 刚体速度
//速度
rigid.velocity = new Vector2(1, 0);
17.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson17_2D相关_2D物理系统_刚体 : MonoBehaviour
{
void Start()
{
#region 知识点一 学习2D物理系统的前提
//学习2D物理系统之前建议先学习Unity入门当中的3D物理系统
//因为他们非常的类似
//由于我们之前详细讲解了3D物理系统
//所以在讲解2D物理系统时会相对简洁一些
//一些讲过的知识点就不过多赘述了
#endregion
#region 知识点二 2D物理系统中的刚体组件
//刚体是物理系统中用于帮助我们进行模拟物理碰撞中力的效果的
//2D物理系统中的刚体和3D中的刚体基本是一样的
//最大的区别是对象只会在XY平面中移动,并且只在垂直于该平面的轴上旋转
#endregion
#region 知识点三 2D物理系统中碰撞产生的条件
//在Unity中,2D物理系统中碰撞产生的条件是:
//两个物体都必须有Collider 2D组件,用于定义物体的形状和边界。
//至少有一个物体必须有Rigidbody 2D组件,用于让物体受到物理引擎的控制。
//两个物体的Layer必须在Physics 2D Settings中设置为可以相互碰撞。
//两个物体的Collider 2D组件必须有相交或重叠的部分。
//如果以上条件都满足,那么当两个物体接触时,就会产生碰撞,并触发相应的事件和回调函数,例如OnCollisionEnter2D,OnCollisionStay2D和OnCollisionExit2D。
//碰撞产生后,物理引擎会根据两个物体的质量,速度,角速度,弹力和摩擦力等属性来计算碰撞的响应,并更新物体的位置和旋转。
//如果需要自定义碰撞的响应,可以使用Physics Material 2D组件来调整弹力和摩擦力。
#endregion
#region 知识点四 2D刚体参数相关
#endregion
#region 知识点五 如何选择不同类型的刚体
//Dynamic动态刚体:受力的作用,要动要碰撞的对象
//Kinematic运动学刚体:通过刚体API移动的对象,不受力的作用,但是想要进行碰撞检测
//Static静态刚体:不动不受力作用的静态物体,但是想要进行碰撞检测
#endregion
#region 知识点六 2D刚体API
//得到2D刚体
Rigidbody2D rigid = this.GetComponent<Rigidbody2D>();
//加力
rigid.AddForce(new Vector2(0, 100));
//速度
rigid.velocity = new Vector2(1, 0);
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com