21.Effector2D效应器2D组件

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

×

喜欢就点赞,疼爱就打赏