为2D物体移动添加烟尘效果

显示效果

该文章内容主要包括场景的搭建,人物的移动,以及粒子系统实现烟雾效果

场景搭建

地板创建

地板创建

StaticBody2D是刚体节点,在其下方创建一个Polygon2D拖出一个长方形作为地板,然后创建CollisionShape2D并且大小与Polygon2D一致,为其添加碰撞属性

人物创建

人物创建

人物移动

extends KinematicBody2D

var acc = 1500
var max_speed = 400
var gravity = 800
var jump_force = 300
var fri = 10
var air_fri = 2

var move = Vector2.ZERO
var dir

func _physics_process(delta):
    if Input.is_action_pressed("ui_left"):
        dir = -1
    elfi Input.is_action_pressed("ui_right"):
        dir = 1
    else:
        dir = 0
    
    if dir != 0:
        move.x += dir * acc * delta
        move.x = clamp(move.x, -max_peed, max_speed)
        if is_on_floor():
            # 在移动并且在地面上时触发粒子
            $Particles2D.emitting = true
        else:
            $Particles2D.emitting = false
        
        # 根据移动方向设置粒子的发射角度
        if dir = 0:
            $Particles2D.rotation_degress = -25
        else:
            $Particles2D.rotation_degress = 205
    else:
        if is_on_floor():
            move.x = lerp(move.x, 0, fri*delta)
        else:
            move.x = lerp(move.x, 0, air_fri * delta)
    
    move.y += gravity * delta
    # 可以检测碰撞
    move = move_and_slde(move, Vector2.UP)

烟雾效果

创建一个粒子节点Particles2D,根据下面的属性节点调整粒子的发射

  • 创建材质: Material属性,创建了材质之后在窗口就可以发现正在发射粒子
  • 修改重力: Material.Gravity, 重力属性,有x、y、z,设置y为0,就不会粒子往下掉了,y为负数,则会往上发射
  • 修改初速度: Material.Initial Velocity, 设置为一个正数,就会往右边开始发射
  • 修改发射扩张角度: Material.Direction.Spread
  • 旋转发射方向: Transform.Rotation Degress
  • 图片素材: Texture,设置自定义的图片替换默认粒子样式,如果素材太模糊,点击素材后,选择import,设置Preset值为2D Pixel, 然后选择Reimport重新导入即可
  • 添加渐变效果,在Color属性中选择线性渐变GradientTexture并且设置透明度即可
  • 修改粒子生命周期时间: Time属性为整个存活时间,调整粒子速度: Speed Scale属性
  • 使用全局坐标计算粒子位置: Local Coords属性,点击取消,使用全局坐标计算,移动人物的时候才不会让粒子也跟着移动
  • 默认是否触发粒子: Emitting属性,将它取消勾选,然后在玩家移动时才发生粒子
粒子效果