为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属性,将它取消勾选,然后在玩家移动时才发生粒子
