Unity 2D 场效应器(Effector 2D)

2022年5月5日 181点热度 0人点赞 0条评论

前言

场效应器用于模拟一些特殊物理区域或者表面

区域效应器(Area Effector 2D)

当2D碰撞器和效应器区域接触时,可以根据设定给物体增加不同方向的力。

image-20220502175112259

属性: 功能:
Use Collider Mask 选中此选项可启用 Collider Mask 属性。如果未启用此选项,则所有 2D 碰撞体都将默认采用全局碰撞矩阵 (Global Collision Matrix)。
Collider Mask 此遮罩用于选择允许与 2D 区域效应器进行交互的特定层。
Use Global Angle 选中此选项可将 Force Angle 定义为全局(世界空间)角度。如果未选中,物理引擎会将 Force Angle 视为局部角度。
Force Angle 要施加的力的角度。
Force Magnitude 要施加的力的大小。
Force Variation 要施加的力的大小变化。
Drag 应用于 2D 刚体的线性阻力。
Angular Drag 应用于 2D 刚体的角阻力。
Force Target 2D 区域效应器在目标游戏对象上施力的作用点。
Collider 目标点定义为 2D 碰撞体的当前位置。如果 2D 碰撞体没有位于质心处,则在此处施力会产生扭矩(旋转)。
Rigidbody 目标点定义为 2D 刚体的当前质心。在此处施力绝对不会产生扭矩(旋转)。

Force Angle 的数值放下为

在这里插入图片描述

给地面加上一个90°的力

Unity_joint_test4

可以实现类似蹦床的效果

浮力效应器(Buoyancy Effector 2D)

它用于模拟简单的流体物理效果,可以设置区域的密度以调整浮力,也可以设定流体的阻力和流量。

image-20220502180901667

属性: 功能:
Use Collider Mask 选中此框可启用“Collider Mask”属性。如果未启用此选项,则所有 2D 碰撞体都将默认采用全局碰撞矩阵 (Global Collision Matrix)。
Collider Mask 此遮罩用于选择允许与效应器进行交互的特定层。请注意,仅在已选择 Use Collider Mask 的情况下,才显示此选项。
Surface Level 定义浮力流体的表面位置。游戏对象高于此线时,不会对其施加浮力。游戏对象与此线相交或完全在此线下方时,将对其施加浮力。此位置指定为沿世界 y 轴的世界空间偏移,但也由游戏对象的变换组件缩放。
Density 流体的密度。密度较大的碰撞体会下沉,密度较小的碰撞体会上浮,密度与流体相同的碰撞体会悬浮在流体中。
Linear Drag 影响游戏对象位置移动的阻力系数。该系数仅适用于流体内部。
Angular Drag 影响游戏对象旋转移动的阻力系数。该系数仅适用于流体内部。
Flow Angle 流体流动方向的世界空间角度(以度为单位)。流体流动将沿指定方向施加浮力。
Flow Magnitude 流体流动力的“力量”。此项与 Fluid Angle 结合,共同指定施加于流体内游戏对象的浮力水平。此大小也可以为负值,在此情况下,以相对于 Flow Angle 的 180 度方向施加浮力。
Flow Variation 在此处输入一个随机改变流体力的值。可指定正负变化来表示 Fluid Magnitude 的随机加减值。

测试效果:

Unity_joint_test5

可以看出摩托车已经陷入流体区域,而且晃动之后会趋于静止的状态,和前面的区域效应器还是有很大的区别的。

点效应器

在collider 或者Rigidbody对象的的中心,发出吸力或者是斥力,作用域整个collider或者Rigidbody区域。

image-20220502183213485

属性: 功能:
Use Collider Mask 是否应该使用“Collider Mask”属性?如果不应该,则所有碰撞体都默认采用全局碰撞矩阵。
Collider Mask 此遮罩用于选择允许与效应器进行交互的特定层。
Force Magnitude 要施加的力的大小。
Force Variation 要施加的力的大小变化。
Distance Scale 应用于源和目标之间距离的缩放。在计算此距离时,按该比值对距离进行缩放,因此可以改变有效距离,从而控制施力的大小。
Drag 应用于刚体的线性阻力。
Angular Drag 应用于刚体的角阻力。
Force Source 力源是吸引或排斥目标对象的点。从该点定义相对于目标的距离。
Collider 源点定义为碰撞体的当前位置。
Rigidbody 源点定义为刚体的当前位置。
Force Target 作用力目标 (Force Target) 是目标对象上由效应器施力的点。从该点定义相对于源的距离。
Collider 目标点定义为碰撞体的当前位置。如果碰撞体没有位于质心处,则在此处施力会产生扭矩(导致目标旋转)。
Rigidbody 目标点定义为刚体的当前质心。在此处施力绝对不会产生扭矩(导致目标旋转)。
Force Mode 如何计算力。
Constant 施力时忽略源和目标之间相隔的距离。
Inverse Linear 施加的作用力以源和目标之间的反线性距离为函数。源和目标处于相同位置时施加全力,但是当源和目标移开时作用力呈线性下降。
Inverse Squared 施加的作用力以源和目标之间的反平方距离为函数。源和目标处于相同位置时施加全力,但是当源和目标移开时作用力按平方下降。这类似于现实世界的重力。

测试效果:

Unity_joint_test6

吸力不太够,直接被扔出去了。(绿色的框是collider区域)

平台效应器(Platform Effector 2D)

用于实现单向碰撞的平台,可以实现类似2d横版跳跃平台,可以从下往平台上跳,不会触发碰撞,而从上往下掉却可以触发碰撞。

Platform Effector 2D Inspector

属性: 功能:
Use Collider Mask 是否应该使用“Collider Mask”属性?如果不应该,则所有碰撞体都默认采用全局碰撞矩阵。
Collider Mask 此遮罩用于选择允许与效应器进行交互的特定层。
Use One Way 是否应该使用单向碰撞行为?
Use One Way Grouping 确保单向行为禁用的所有触点都作用于所有碰撞体。在穿过平台的对象上使用多个碰撞体并且这些碰撞体需要整体作为一个组一起行动时,此设置非常有用。
Surface Arc 这是一个弧的角度,以局部“向上”方向为中心,用于定义不允许碰撞体通过的表面。该弧以外的任何元素都视为用于单向碰撞。
Use Side Friction 是否应该在平台两侧使用摩擦?
Use Side Bounce 是否应该在平台两侧使用弹性?
Side Arc 这是一个弧的角度,以效应器局部“向左”和“向右”方向为中心,用于定义平台两侧。该弧以内的所有碰撞法线都视为用于“侧面”行为。

表面效应器(Surface Effector 2D)

用于沿一个表面施加一个方向的力,效果有点类似传送带,(其实这种效果使用区域效应器也能实现,不太明白为什么要单独做一个)

image-20220502192322698

属性: 功能:
Use Collider Mask 是否应该使用“Collider Mask”属性?如果不应该,则所有碰撞体都默认采用全局碰撞矩阵。
Collider Mask 此遮罩用于选择允许与效应器进行交互的特定层。
Speed 沿表面保持的速度。
Speed Variation 速度的随机增加值(0 与 Speed Variation 值之间的任何数值)将应用于速度。如果在此处输入负数,则会随机减速
Force Scale 允许缩放效应器尝试沿表面达到指定速度时施加的力。如果为 0,表示不施力,相当于禁用。如果为 1,表示施加全力。此属性相当于为满足指定速度而修改目标对象的速度,值越低就越慢,值越高越快。但是应慎重,因为施加全力会很容易抵消施加在目标对象上的任何其他力,例如跳跃或其他移动作用力。因此,建议设置小于 1 的值。
Use Contact Force 是否应在表面和目标碰撞体之间的触点施力?使用触点作用力可以使目标对象旋转,而不使用触点作用力则不会这样。
Use Friction 接触表面时是否应使用摩擦?
Use Bounce 接触表面时是否应使用弹性?

测试效果:

Unity_joint_test7

注意事项

  1. 在collider对象中勾选Used by Effector选项效应器才能生效
  2. 区别效应器为触发型还是非触发型,触发型需要勾选collider 的Is Trigger 属性

参考文档:

大脸猫

这个人虽然很勤快,但什么也没有留下!

文章评论