文章目录
- 1. 引言
- 2.为什么不用ParticleSystem (Shuriken)?
- 3.VFX 在 DOTS 中的两种使用方案
- 3.1.GraphicsBuffer 模式
- 3.2.SendEvent 模式
- 3.3.核心特性对比表
- 4. 核心挑战
- 4.1.VFXPool
- 4.2 驱动逻辑:`VFXSystem`
- 5. VFX Graph避坑指南
- 6. 总结
1. 引言
在 Unity ECS (Entities Graphics) 开发中,实现大规模实体的视觉特效(VFX)一直是一个挑战。传统的传统的每个实体挂载一个ParticleSystem或者VisualEffect组件会导致严重的性能问题。本文将分享一种高性能的解决方案,实现在数万名喷火兵同时开火时,依然保持流畅的帧率。
2.为什么不用ParticleSystem (Shuriken)?
在最初尝试解决特效问题时,我们也考虑过使用 Unity 传统的ParticleSystem。在 DOTS 中,确实可以使用类似“松散耦合”的方式,将一个全局ParticleSystem移动到发射点并调用.Emit()。但这套方案最终被我们弃用,原因如下:
1. 无法精准控制持续状态ParticleSystem的.Emit()是一次性的发射指令,更适合像“子弹出膛”、“一次性爆炸”、“简易拖尾”这种**“发射即遗忘 (Fire-and-Forget)”的效果。对于喷火兵这种需要持续控制射击、停止、打断**的流体特效,基于 CPU 发射的ParticleSystem很难与 ECS 实体的高频状态切换完美同步。
2. 惨烈的性能瓶颈 (C