21.2D相关-2D物理系统-效应器
21.1 知识点
2D效应器是什么
- 2D效应器是配合2D碰撞器一起使用,可以让游戏对象在相互接触时产生一些特殊的物理作用力。
- 通过2D效应器,可以快捷的实现一些传送带、互斥、吸引、漂浮、单向碰撞等等效果。
不同种类2D效应器组件参数和使用
AreaEffector2D区域效应器2D
创建一个方形图片。添加碰撞器和区域效应器。
注意碰撞器要设置为触发器并且开启效应器(就是由效果器使用)。
主要作用:在一个区域内让游戏对象受到力和扭矩力的作用。
效果:设置好力度后。玩家进入区域后会产生力的作用慢慢移动,可以用于传送带的制作。假如把力角度设置为90度,并且调大力度,让力度大于重力。玩家会产生蹦床或者浮力的效果。
Use Collider Mask 使用碰撞器遮罩
- 是否启用碰撞器遮罩
- 如果开启才会出现下面的Collider Mask,可以通过选择层,决定该效应器只会作用于哪些层的对象
- 不勾选所有都会收到影响
Collider Mask 碰撞器遮罩
- 区域效应器作用于哪些层的对象
Use Global Angle 使用全局角
- 勾选将使用世界坐标系角度
- 如果不勾选,角度为局部角度,就是自己坐标系。假如选择自己的z轴就会起作用。
Force Angle 力角度
- 施加力的角度
Force Magnitude 力度
- 施加力的大小
Force Variation 力变化
- 施加力的随机大小变化
- 会在Force Magnitude基础上根据该值进行随机变化
ForceTarget 力目标
- 效应器在目标对象上施加力的作用点
- Rigidbody 刚体:以刚体的当前质心(不会产生扭矩力)
- Collider 碰撞器:以碰撞器的当前位置(如果碰撞器有偏移,没有位于质心,可能会产生扭矩力,带来旋转)
Drag 阻力
Angular Drag 角(扭矩)阻力
- 注意假如刚体锁定不会产生角阻力效果
BuoyancyEffector2D浮力效应器2D
创建一个方形图片。添加碰撞器和浮力效应器。
注意碰撞器要设置为触发器并且开启效应器(就是由效果器使用)。
主要作用:模拟流体行为,浮动和阻力相关设置,让玩家在该区域看起来像在水里移动。
效果:调整好玩家对象重力和浮力效应器的密度之后,可以产生模拟水流漂浮的效果。
Density 密度
- 流体密度
- 进入浮力效应器的对象密度较大,碰撞体会下沉,密度越小碰撞体会上浮
- 密度和流体相同的碰撞体会浮在流体中
Surface Level 表面位置
- 定义浮力流体的表面位置,对象高于此线时,不会对其施加浮力,以下或者相交会施加浮力。沿世界Y轴偏移
Linear Drag 线性阻尼
- 影响对象在水中移动的阻力系数
Angular Drag 角阻力
- 影响对象在水中旋转的阻力系数
Flow Angle 流角度
- 流体流动方向相对世界控件的角度,沿指定方向施加浮力
Flow Magnitude 流强度
- 与FlowAngle结合使用,前者决定力的角度,该值确定浮力大小
- 就是模拟水流的效果
Flow Variation 流变化
- 随机改变流体力的值
PointEffector2D点效应器2D
创建一个方形图片。添加碰撞器和点效应器。
注意碰撞器要设置为触发器并且开启效应器(就是由效果器使用)。
主要作用:模拟磁铁吸引或者排斥的效果。
效果:调整好参数之后,玩家进入点效应器的区域会被吸到中心点。会和重力一起作用。可以用作磁铁、龙卷风的效果。假如调整力的大小为正数,可以模拟吹风机的效果。
Force Magnitude 力度
- 施加力的大小
Force Variation 力变化
- 施加力的大小变化
Distance Scale 距离比例
- 效应器和目标之间举例的缩放。
- 计算距离时,会按该比值对距离进行缩放
Force Source 力来源
- 力源来自哪个位置,从该点计算距离。
- Rigidbody 刚体:刚体的位置
- Collider 碰撞器:碰撞器的位置
Force Target 力目标
- 作用力目标位置,用改点计算位置
- Rigidbody 刚体:刚体的位置,不会产生扭矩力
- Collider 碰撞器:碰撞器的位置,如果碰撞器有偏移,可能会产生扭矩力
Force Mode 力模式
- 计算力的模式
- Constant 常量:忽略源和目标之间相隔的距离
- Inverse Linear:反线性距离计算,距离越远,力的大小呈线性减小
- Inverse Squared:反平方距离计算,力的大小呈指数减小(按平方下降),类似现实世界重力
PlatformEffector2D平台效应器2D
创建一个方形图片和一个圆形图片。添加碰撞器和平台效应器。
注意碰撞器要开启效应器(就是由效果器使用),不要设置为触发器。
主要作用:2D游戏当中的平台或可往上跳跃的墙壁。
效果:普通添加碰撞器的平台从下面跳串不过去的。假如是平台效应器可以从下往上跳上去,但是又可以落到上面的平台上。相当于半边有碰撞器格挡。
Rotational Offset 旋转偏移
- 旋转偏移量,控制平台角度偏移
Use One Way 使用单向
- 是否使用单向碰撞行为
- 取消的话下面也跳不过去了
Use One Way Grouping 使用单向群组
- 当平台式有多个碰撞器组合时,可以通过它将所有碰撞器设置为单向碰撞行为
- 就是假如平台有很多其他碰撞器,勾选这个可以让其他碰撞器也有单向的效果
Surface Arc 表面弧度
- 以局部坐标系下向上的方向为中心,填写一个角度值,定义不允许通过的表面,该角度外的其它地方视为单向碰撞
- 要在下面60度的范围才能通过到单向
- 一般用于圆形平台
Use Side Friction 使用侧向摩擦力
- 是否应该在平台两侧使用摩擦
- 假如使用的话,按住移动键,玩家你一直贴在平台的两侧。
- 不使用的话,平台两边就是光滑的
Use Side Bounce 使用侧反弹
- 是否应该在平台两侧使用弹性
Side Arc 边缘弧度
- 用于定义左右两侧平台的响应弧度
SurfaceEffector2D表面效应器2D
创建一个方形图片。添加碰撞器和表面效应器。
注意碰撞器要开启效应器(就是由效果器使用),不要设置为触发器。
主要作用:模拟传送带。
注意:平台效果器不起作用的原因可能是在对象刚体设置了刚体速度,这样会影响效应器效果。可以在PlayerObject脚本中更改为没有输入的时候再设置速度
if (h != 0)
{
// 由于重力会给予对象y方向的值,所以我们左右移动时,应该只是改变左右速度,y的速度应该保留原有的值
rigidBody2D.velocity = new Vector2(h * moveSpeed, rigidBody2D.velocity.y); // 改变刚体速度
}
效果:碰到会像传送到一样往前滑。
Speed 速度
- 表面保持的速度
Speed Variation 速度变化
- 速度的随机增加值
Force Scale 力比例
- 缩放沿表面移动时施加的力。
- 如果是0表示不施加力,相当于禁用。
- 值越低越慢,值越高越快,建议不要设置为1,因为当设置为1时可能会抵消施加在物体上的其它力,比如跳跃的力
Use Contact Force 使用恒力
- 是否对接触物体表面的出点施加力,如果选择会让对象旋转,如果不开启则不会旋转
- 想让对象接触时旋转再勾选
Use Friction 使用摩擦力
- 是否使用摩擦力
Use Bounce 使用反弹
- 是否使用弹力
总结
效应器其实只是Unity为我们写好的一些2D游戏中常用功能的一些代码。在实际开发中我们不应该过于依赖效应器。如果发现效应器和自己的游戏需求不太匹配时,我们完全可以自己实现符合需求的“效应器”。
21.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson21_2D相关_2D物理系统_效应器 : MonoBehaviour
{
void Start()
{
#region 知识点一 2D效应器是什么?
//2D效应器是配合2D碰撞器一起使用
//可以让游戏对象在相互接触时产生一些特殊的物理作用力
//可以通过2D效应器
//快捷的实现一些
//传送带 互斥 吸引 漂浮 单向碰撞等等效果
#endregion
#region 知识点二 不同种类2D效应器的使用和参数讲解
//1.区域效应器
//2.浮力效应器
//3.点效应器
//4.平台效应器
//5.表面效应器
#endregion
#region 总结
//效应器其实只是Unity为我们写好的一些2D游戏中常用功能的一些代码
//在实际开发中我们不应该过于依赖效应器
//如果发现效应器和自己的游戏需求不太匹配时
//我们完全可以自己实现符合需求的“效应器”
#endregion
}
}
21.3 练习题
在上一次练习题的基础上,在场景中加入各种效应器,让场景更具多样性
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com