Unity - 2D物理系统

Unity - 2D物理系统

PS: 通用属性放在每一章最前面,每个组件只介绍特殊属性;

1.1 2D刚体(Rigidbody 2D)
属性 描述
Body Type Dynamic(动力学): 适用于需要移动并且接受完全物理模拟的2D刚体,包括重力、碰撞和施加力等影响; Kinematic(运动学): 适用于需要移动但不受物理力作用的2D刚体; **Static(静态):**适用于不需要移动的2D刚体,它们作为游戏中的静态环境或障碍物存在;
Material 可装载 2D 物理材质;
Simulated 勾选后开启物理模拟;
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 Freeze Position(冻结位置): 可以通过勾选取消 X 和 Y 轴的移动; **Freeze Rotation(冻结旋转):**可以通过勾选取消 Z 轴的旋转;
1.2 2D 碰撞体
2D 碰撞体类别 说明
Circle Collider 2D 圆形碰撞体
Box Collider 2D 盒子(矩形)碰撞体
Polygon Collider 2D 多边形碰撞体
Edge Collider 2D 线段(边界)碰撞体
Capsule Collider 2D 胶囊碰撞体
Composite Collider 2D 复合碰撞体
通用属性
属性 描述
Material 可装载 2D 物理材质;
Is Trigger 勾选后标记为触发器,触发器没有物理状态;
Used By Effector 勾选后启用效应器;
Used By Composite 勾选后合并到复合碰撞体
Auto Tiling 自适应碰撞器大小;
Offset 根据 X 、Y 轴对碰撞体进行偏移;
Size 根据 X 、Y 轴对碰撞体进行缩放
Edge Radius 默认为 0 ,可以增加碰撞体积,且值越大边缘越近似圆;
Auto Tiling 自适应碰撞器大小;
Polygon Collider 2D
属性 描述
Points Paths - Size: 碰撞体数量; Paths - Element m: 对应第 m+1 个碰撞体; Paths - Element m - Size: 第 m+1 个碰撞体点的数量; **Paths - Element m - Element n:**第 m+1 个碰撞体的第 n+1 个点,X、Y 表示坐标位置;
Edge Collider 2D
属性 描述
Points Size: 点的数量; **Element n:**对应第 n+1 个点,X、Y 表示坐标位置;
Use Adjacent Start Point 启用后开启起点碰撞法线,X、Y 表示坐标位置;
Use Adjacent End Point 启用后开启终点碰撞法线,X、Y 表示坐标位置;
Capsule Collider 2D
属性 描述
Direction Vertical: 碰撞体的垂直高度大于等于水平高度; **Horizontal:**碰撞体的水平高度大于等于垂直高度;
Composite Collider 2D
属性 描述
Geometry Type Outlines: 组合碰撞体时生成空心的轮廓; **Polygons:**组合碰撞体时生成实心的轮廓;
Generation Type Synchronous: 更改 2D 复合碰撞体时或者更改其任何成员碰撞体时立即自动生成新的碰撞体; **Manual:**更改 2D 复合碰撞体时或者更改其任何成员碰撞体时需要手动设置碰撞体;
Vertex Distance 设置从复合碰撞体中的顶点所允许的最小间距。低于限值的顶点将被删除;
Offset Distance 设置的数值增大,这个复合碰撞器的范围会向中心位置收缩,当增大到达一定数值后,这个复合碰撞器的范围会完全消失;
碰撞检测脚本
c 复制代码
using UnityEngine;

//碰撞器测试类
public class CollisionTest : MonoBehaviour
{
    //碰撞开始
    private void OnCollisionEnter2D(Collision2D collision)
    {
        Debug.Log("Enter");
    }
    //碰撞持续
    private void OnCollisionStay2D(Collision2D collision)
    {
        Debug.Log("Stay");
    }
    //碰撞结束
    private void OnCollisionExit2D(Collision2D collision)
    {
        Debug.Log("Exit");
    }
}

//触发器测试类
public class TriggerTest : MonoBehaviour
{
    //触发开始
    private void OnTriggerEnter2D(Collider2D collision)
    {
        Debug.Log("Enter");
    }
    //触发持续
    private void OnTriggerStay2D(Collider2D collision)
    {
        Debug.Log("Stay");
    }
    //触发结束
    private void OnTriggerExit2D(Collider2D collision)
    {
        Debug.Log("Exit");
    }
}
1.3 Physics Material 2D(2D物理材质)
属性 描述
Friction 取值 0 - 1,增大该值增加物理摩擦力;
Bounciness 启用后开启起点碰撞法线,X、Y 表示坐标位置;
Use Adjacent End Point 碰撞从表面反弹的程度。值为 0 表示没有弹性,值为 1 表示完美弹性,没有能量损失;
1.4 2D 恒定力 (Constant Force 2D)
属性 描述
Force 在世界坐标空间中应用的力的向量,X 为横向,Y 为纵向;
Relative Force 在本地坐标空间中应用的力的向量,X 为横向,Y 为纵向;
Torque 在世界坐标空间中应用的扭矩的向量,对象会围绕此向量开始旋转。此向量越长,旋转便越快;
1.5 2D 关节
2D 关节类别 描述
Hinge Joint 2D 2D铰链关节
Distance Joint 2D 2D距离关节
Fixed Joint 2D 2D固定关节
Friction Joint 2D 2D摩擦关节
Relative Joint 2D 2D相对关节
Slider Joint 2D 2D 滑动关节
Spring Joint 2D 2D 弹簧关节
Target Joint 2D 2D 目标关节
Wheel Joint 2D 2D 车轮关节
通用属性
属性 描述
Enable Collision 勾选后允许两个连接的对象之间发生碰撞;
Connected Rigid Body 连接到的另一个刚体对象;
Auto Configure Connected Anchor 勾选后自动设置连接锚点位置;
Anchor 设置锚点位置;
Connected Anchor 设置连接锚点位置;
Use Motor 勾选后开启马达;
Motor Motor Speed: 指定马达速度; **Maximum Motor Force:**马达可以施加的最大扭矩;
Use Limits 勾选后启用角度限制;
Angle Limits Lower Angle: 最低角度; **Upper Angle:**最高角度;
Break Force 受到最大限制的力后断开,设置为 Infinity 表示不会因为力断开;
Break Torque 受到最大限制的扭矩后断开,设置为 Infinity 表示不会因为扭矩断开;
Distance Joint 2D
属性 描述
Auto Configure Distance 勾选后自动设置距离;
Distance 手动指定距离;
Max Distance Only 勾选后 Distance 设置的值为对象的最大距离;
Fixed Joint 2D
属性 描述
Damping Ratio 抑制弹簧振荡的程度,0 到 1 之间,值越大;
Frequency 控制弹簧的硬度,决定了对象振动频率;
Friction Joint 2D
属性 描述
Max Force 降低对象线速度的力;
Max Torque 降低对象角速度的力;
Relative Joint 2D
属性 描述
Max Force 能受到的最大力;
Max Torque 能受到的最大扭矩;
Correction Scale 确保关节的行为符合预期,默认为0.3;
Auto Configure Offset 自动设置偏移量;
Linear Offset 给定 X、Y 轴的线性偏移量;
Angular Offset 给定角偏移量;
Slider Joint 2D
属性 描述
Auto Configure Angle 勾选后自动设置滑动角度;
Translation Limits Lower Translation: 滑动最小偏移量; **Upper Translation:**滑动最大偏移量;
Auto Configure Distance 勾选后自动设置距离;
Distance 给定弹簧的长度;
Target Joint 2D
属性 描述
Auto Configure Target 自动设置目标点;
Target 给定一个目标点坐标;
1.6 2D 效应器
2D 效应器类别 描述
Area Effector 2D 2D 区域效应器
Buoyancy Effector 2D 2D 浮力效应器
Point Effector 2D 2D 点效应器
Platform Effector 2D 2D 平台效应器
Surface Effector 2D 2D 表面效应器
通用属性

Drag: 线性阻力;
Angular Drag: 角阻力;

属性 描述
Use Collider Mask 使用碰撞遮罩过滤层级之间的碰撞,通过Collider Mask指定;
Force Use Global Angle: 勾选后使用全局角度; Force Angle: 施加力的角度; Force Magnitude: 施加力的大小; Force Variation: 力的大小浮动; **Force Target:**指定作用力的目标;
Damping
Buoyancy Effector 2D
属性 描述
Density 流体的密度,密度较大的碰撞体会下沉,密度较小的碰撞体会上浮;
Surface Level 浮力流体的位置,对象高于此线时,不会对其施加浮力。
Flow Flow Angle: 水流角度; Flow Magnitude: 水流大小; **Flow Variation:**水流大小的浮动值;
Point Effector 2D
属性 描述
Force Force Magnitude: 施加的力,负值为吸引力,正值为斥力; Force Variation: 力的大小浮动; Distance Scale: 效应器和目标之间距离的缩放,计算距离时,会按照该比值对距离进行缩放; Force Source: 力的源头,可选刚体或碰撞器; Force Target: 作用力的对象,可选刚体或碰撞器; **Force Mode:**Constant(忽略源和目标之间相隔的距离)、Inverse Linear(距离越远,力的大小呈线性减小)、Inverse Squared(力的大小按平方下降,类似现实世界重力);
Platform Effector 2D
属性 描述
Rotational Offset 旋转偏移
One Way Use One Way: 勾选后开启单向碰撞行为; Use One Way Grouping: 勾选此选项后,同一组的平台将共享同一个单向平台属性,可以方便批量设置; **Surface Arc:**定义一个弧的角度,用于单向碰撞;
Sides Use Side Friction: 勾选后开启平台两侧摩擦; Use Side Bounce: 勾选后开启平台两侧弹力; **Side Arc:**和 Surface Arc 类似,但是作用于平台的侧面;
Surface Effector 2D
属性 描述
Force Speed: 沿表面保持的速度; Speed Variation: 随机加速度值,如果设置为负数则会随机减速; **Force Scale:**调整施加力的比例,最好不要设为1,不然会抵消掉跳跃移动等力;
Options Use Contact Force: 勾选后在表面和目标碰撞体之间的触点施力,可以使目标对象旋转; Use Friction: 勾选后开启摩擦力; **Use Bounce:**勾选后开启弹力;
相关推荐
向宇it6 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
Heaphaestus,RC8 小时前
【Unity3D】获取 GameObject 的完整层级结构
unity·c#
芋芋qwq8 小时前
Unity UI射线检测 道具拖拽
ui·unity·游戏引擎
tealcwu9 小时前
【Unity服务】关于Unity LevelPlay的基本情况
unity·游戏引擎
大眼睛姑娘11 小时前
Unity3d场景童话梦幻卡通Q版城镇建筑植物山石3D模型游戏美术素材
unity·游戏美术
鹿野素材屋16 小时前
Unity Dots下的动画合批工具:GPU ECS Animation Baker
unity·游戏引擎
小春熙子1 天前
Unity图形学之着色器之间传递参数
unity·游戏引擎·技术美术·着色器
虾球xz1 天前
游戏引擎学习第15天
学习·游戏引擎
Java Fans1 天前
在Unity中实现电梯升降功能的完整指南
unity·游戏引擎
GrimRaider1 天前
[Unity]TileMap开发,TileMap地图缝隙问题
unity·游戏引擎·tilemap