1.刚体
刚体是要给非常重要的组件。新的创建的物体默认是没有物理效果的。比如缺少:物体的重力、摩檫力
、碰撞等等。
1.1.给物体添加刚体
Physics->Rigibody
字段 | 描述 |
---|---|
Mass | 质量 值越大下落速度越快 |
Drog | 阻力 值越大,减速越快 |
Angular Drag | 角速度 值越大 旋转减速越快 |
Use Gravity | 是否使用重力 |
Is Kinematic | 是否受重力影响 |
Interpolate | 设置图像差值 |
Collision Detection | 碰撞检测 |
–Discrete | 离散碰撞器 |
–Continuous | 连续碰撞检测 |
–Continuous Dynamic | 动态连续检测 |
Constraints | 冻结 |
–Freeze Position | 冻结方向 |
–Freeze Rotation | 冻结旋转 |
Discrete(离散检测):当物体这一帧还在前面,下一帧就到后面去了,就检测不到,不适用于高速运动的物体
Continuous(连续检测):防止对象穿过所有静态碰撞体
Continuous Dynamic(动态连续检测):防止对象穿过所有静态碰撞体以及设置为Continuous或Continuous Dynamic的刚体
1.2.物理参数设置
Edit->Project Setting->Physics
属性 | 描述 |
---|---|
Gravity | 重力 默认9.8N(牛) 其余方向无重力 |
Default Material | 默认物理材质 |
Bounce Threshold | 反弹值,当物体下落接触物体时速度低于反弹值则不在反弹 |
Sleep Velocity | 睡眠速度 ,低于睡眠速度时保持静止 |
Sleep Angular Velocity | 睡眠角速度 |
Max Angular Velocity | 最大角速度 |
Min Penetration For Penalty | 用于物体与物体之间碰撞后的最小穿透力 |
Solver Iteration Count | 迭代数量 |
Raycasts Hit Triggers | 释放启用命中触发器 |
Layer Collision Matrix | 图层碰撞矩阵 |
1.3.给刚体施加力
if (Input.GetKeyDown(KeyCode.U))
{
// 给X方向施加1000的力
GetComponent<Rigidbody>().AddForce(1000, 0, 0);
}
1.4.碰撞和停止运动(休眠)
函数 | 描述 |
---|---|
OnCollisionEnter(Collision collision) | 两个刚体接触瞬间调用 |
OnCollisionStay(Collision collision) | 刚体碰撞过程中每帧调用 |
OnCollisionExit(Collision collision) | 两个刚体停止接触时调用 |
private void OnCollisionEnter(Collision collision)
{
Debug.Log("碰撞开始" + collision.gameObject.name);
}
private void OnCollisionStay(Collision collision)
{
Debug.Log("碰撞持续" + collision.gameObject.name);
}
private void OnCollisionExit(Collision collision)
{
Debug.Log("碰撞结束" + collision.gameObject.name);
// 使刚体停止运动
collision.gameObject
.GetComponent<Rigidbody>()
.Sleep();
}
作业
射击小游戏
2.碰撞器
如果游戏对象直接需要相互碰撞感应,则必须添加碰撞器,在添加刚体时,会自动添加碰撞器。
碰撞器模型决定了碰撞方式。会产生碰撞反馈
先后刚体后有碰撞器(双方只是有一方是刚体)
名称 | 描述 | |||||
---|---|---|---|---|---|---|
Box Collider | 盒子碰撞器 | |||||
Sphere Collider | 球形碰撞器 | |||||
Capsule Collider | 胶囊碰撞器 | |||||
Mesh Collider | 网格碰撞器 | |||||
Wheel Collider | 车轮碰撞器 |
字段 | 描述 |
---|---|
Edit Collider | 编辑碰撞器 |
Is Trigger | 设置为触发器 |
Material | 材质 |
Center | 位置 |
Size | 大小和编辑碰撞器一致 |
2.1.添加碰撞器
添加组件 Collider
2.2.添加物理材质
字段 | 描述 |
---|---|
Dynamic Friction | 动摩擦系数 通常值从 0 到 1。 0值感觉像冰,1值会使它很快停止,除非大量的力或重力推动物体。 |
Static Friction | 静摩擦系数 通常值从 0 到 1。零值感觉像冰,1值会使物体很难移动 |
Bounciness | 弹力系数 0 会反弹、1反弹,不会有任何能量损失 某些近似值是预料之中的虽然这可能会为模拟增加少量的能量。 |
Friction Combine | 摩擦系数组合(两个物体摩擦系数的选择,有:平均值、最大值、最小值、差值) |
Bounce Combine | 弹力系数组合(两个物体弹力系数的选择,有:平均值、最大值、最小值、差值) |
给地面和小球全部添加 物理材质全部设置位0观察速度
2.3.触发器
双方必须有一方勾选触发器,否则是调用碰撞器
函数 | 描述 |
---|---|
OnTriggerEnter(Collider other) | 触发器碰撞开始 |
OnTriggerStay(Collider other) | 触发器碰撞持续 |
OnTriggerExit(Collider other) | 触发器碰撞结束 |
private void OnTriggerEnter(Collider other)
{
Debug.Log("进入触发器");
}
private void OnTriggerStay(Collider other)
{
Debug.Log("每帧持续触发器");
}
private void OnTriggerExit(Collider other)
{
Debug.Log("退出触发器");
}
3.射线
射线的作用是检测该线段上是否存在物体,可以使用 人物移动(英雄联盟),射击(FPS)j、物品拾取等等。
// 创建一条射线
Ray ray= new Ray(起点位置,终点位置);