《学Unity的猫》——第十六章:Unity粒子系统ParticleSystem,打造一场浪漫樱花雨
1. 樱花雨效果预览与粒子系统简介最近工作室接到一个日式庭院场景的需求客户特别强调要加入樱花飘落的动态效果。作为一个没见过真实樱花的南方人我对着参考视频研究了整整三天终于用Unity粒子系统还原出了满意的效果。先来看看最终实现的樱花雨粉白花瓣随机大小旋转自然弧形飘落轨迹透明度渐变消失受风力影响左右摇摆Unity的ParticleSystem组件就像个魔法盒子通过调整各种参数可以模拟出火焰、烟雾、雨水等自然现象。这次我们要重点使用几个关键模块Renderer控制花瓣的视觉表现Shape定义发射区域Velocity影响运动轨迹Rotation增加动态细节Color营造渐变效果2. 美术资源准备2.1 花瓣贴图制作好的粒子效果离不开合适的美术资源。我测试了三种花瓣贴图方案单瓣贴图使用单独花瓣PNG推荐文件尺寸建议512x512背景透明通道必须保留可在Photoshop中绘制5-7种不同形态图集方式// 代码加载多张贴图随机选择 public Texture[] petalTextures; material.mainTexture petalTextures[Random.Range(0,petalTextures.Length)];程序生成使用Shader Graph动态生成适合需要特殊光影效果的情况2.2 材质球配置创建材质时要注意这三个关键设置Shader类型选择Particles/Standard Surface渲染模式设置为Fade颜色混合启用Alpha通道实测发现使用Soft Particles能有效解决花瓣与场景物体的穿插问题material.SetFloat(_SoftParticlesEnabled, 1.0f); material.SetFloat(_SoftParticlesNearFade, 1.0f); material.SetFloat(_SoftParticlesFarFade, 2.0f);3. 基础粒子系统搭建3.1 发射器形状设置樱花雨应该从屏幕上方随机位置产生我测试了三种Shape类型形状类型适用场景参数建议Box常规使用Scale设为(10,0.5,0)Sphere环绕效果Radius设为5Cone特定角度Angle设为25度推荐使用Box形状并做以下调整旋转发射器30度产生斜向效果将Y轴Scale设为0.1模拟薄层发射启用Randomize Position增加随机性3.2 运动参数配置要让花瓣自然飘落需要组合使用这些模块Start Speed设为0禁用初始喷射Velocity over Lifetime// Y轴下落速度 velocityModule.y new ParticleSystem.MinMaxCurve(-2f, -0.5f); // X轴随机摆动 velocityModule.x new ParticleSystem.MinMaxCurve(-1f, 1f);Force over Lifetime添加轻微Z轴力制造景深变化使用曲线控制力场变化4. 视觉细节优化4.1 动态旋转效果通过三个模块组合实现真实旋转Start Rotation设为Random Between Two Constants范围0-360度全覆盖Rotation over LifetimerotationModule.enabled true; rotationModule.z new ParticleSystem.MinMaxCurve(-45f, 45f);Rotation by Speed关联下落速度与旋转速度创建AnimationCurve控制关系4.2 颜色与透明度樱花雨的精髓在于花瓣的渐变消失Color over Lifetime使用Gradient编辑器起始透明度80%结束透明度0%Size over Lifetime结合两条曲线前期保持100%后期快速缩小提示可以复制一个粒子系统专门处理落在地面的花瓣调整参数使其停留更久5. 环境交互增强5.1 风力系统集成创建WindZone并关联粒子添加Wind Zone游戏对象设置Main为0.3Turbulence为0.5在粒子系统中启用External Forces模块externalForcesModule.enabled true; externalForcesModule.multiplier 0.8f;5.2 碰撞检测实现让花瓣能与场景物体交互添加Collision模块设置类型为World调整Dampen为0.2保留部分动能启用Send Collision Messages用于触发事件6. 性能优化技巧当需要渲染大量花瓣时LOD系统近景使用完整粒子中景减少50%数量远景替换为简模GPU InstancingparticleSystem.enableGPUInstancing true;烘焙参数预计算运动轨迹使用Burst发射模式实际项目中我在移动端实现了2000花瓣同时渲染仍保持60fps关键是把Max Particles控制在合理范围并通过脚本动态调整发射率。