如何在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
相关产品推荐
相关产品推荐

