You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity中实现物体移动或被推动时出现粒子效果?

Unity 2D 游戏对象移动/受推触发粒子效果实现方案

前期准备

  • 给目标游戏对象挂载Rigidbody2D(2D刚体)组件,根据需求调整重力缩放数值;同时挂载对应形状的2D碰撞体组件(BoxCollider2D/CircleCollider2D等),确保碰撞和移动逻辑可以正常触发。
  • 在层级面板右键选择 效果 -> 粒子系统,将新建的粒子系统设为目标游戏对象的子对象,调整位置到你想要展示效果的区域(比如对象底部做扬尘效果),取消勾选粒子系统组件里的「唤醒时播放」选项,避免游戏一开始就自动播放。

2D 移动粒子参数参考(适合扬尘/拖尾类效果)

  • 持续时间:0.2s 左右,开启循环
  • 起始生命周期:0.3~0.7s 随机
  • 起始速度:数值控制在 0.5~2 之间,方向根据需求调整(比如底部扬尘就设置Y轴向下的速度)
  • 起始大小:0.05~0.2 随机,适配你的2D游戏像素/单位比例
  • 发射器形状选择「圆形」或「矩形」,半径和目标游戏对象的宽度匹配即可
  • 渲染模块的渲染模式选择「广告牌」,可以把颜色渐变的末尾透明度调为0,实现粒子自然消失的效果

控制逻辑代码

给目标游戏对象新建挂载C#脚本MoveParticleTrigger.cs,代码如下:

using UnityEngine;

public class MoveParticleTrigger : MonoBehaviour
{
    //  Inspector面板中拖拽你做好的子对象粒子系统到这里
    public ParticleSystem moveParticle;
    //  触发粒子效果的最小速度阈值,可根据实际移动速度调整
    public float minMoveSpeed = 0.1f;
    //  碰撞触发粒子的最小相对速度阈值
    public float minCollisionSpeed = 1f;

    private Rigidbody2D _rb;

    void Start()
    {
        _rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        //  移动速度达标时播放粒子,否则停止
        if (_rb.velocity.magnitude > minMoveSpeed)
        {
            if (!moveParticle.isPlaying) moveParticle.Play();
        }
        else
        {
            if (moveParticle.isPlaying) moveParticle.Stop();
        }
    }

    //  被其他对象推动/碰撞时额外触发一次粒子爆发
    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.relativeVelocity.magnitude > minCollisionSpeed)
        {
            //  一次性发射10个粒子,数量可自行调整
            moveParticle.Emit(10);
        }
    }
}

调试说明

  • 脚本挂载完成后,把作为子对象的粒子系统拖拽到脚本对应的moveParticle参数栏
  • 运行游戏调整minMoveSpeed和minCollisionSpeed的数值,直到效果符合你的预期
  • 如果只需要被推动时才展示效果,删除Update里的移动判断逻辑即可。

内容的提问来源于stack exchange,提问作者grass cow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:45:01