U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 12 章 · 特效与粒子
/
第 198 课
LESSON 198 · 特效与粒子
特效性能优化
特效优化已掌握。下一课综合练习特效与音频整合。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 12 章 · 特效与粒子
📍 第 198 / 300 课
课程进度
198 / 300
🎯
本节学习目标
掌握粒子优化
掌握对象池
掌握纹理与批处理
🚀
课程导读
特效越多越华丽,也越吃性能。本课学会“既要特效又不卡”。
◆
粒子优化
控制“量”。
【Max Particles】Particle System 的 Main 模块有 Max Particles 上限:限制粒子总数,防失控爆表。
【Rate/Burst 节制】发射率与爆发数按需设置,肉眼分辨不出时尽量小。
【Lifetime 缩短】粒子寿命短 = 同时存活的少 = 省性能。
【Renderer 简化】不用贴图/用简单贴图;Render Mode 选最省。
【关键】大量同材质粒子能合批(GPU 一次画),材质尽量统一。
【粒子数估算】屏幕上百粒子量级轻松,上千要小心。
【代码】ps.maxParticles = 500;
【注意】特效密度与画面复杂度平衡,移动端尤其克制。
【工具】Profiler 的 Rendering 查看粒子开销(第 268 课)。
💡
粒子优化三板斧:限数量(Max Particles)、缩短寿命、统一材质。
◆
对象池与纹理优化
“反复用的特效”不重建。
【问题】频繁实例化/销毁特效(爆炸、子弹火花)会造成卡顿(GC 与 Instantiate 开销)。
【对象池】预创建一批特效,用完“回收”再“复用”:
public class ObjectPool : MonoBehaviour {
public GameObject prefab; public int size = 20;
List<GameObject> pool;
void Start() { pool = new List<GameObject>(); for (int i=0;i<size;i++) { var g = Instantiate(prefab); g.SetActive(false); pool.Add(g);} }
public GameObject Get() {
foreach (var g in pool) if (!g.activeSelf) { g.SetActive(true); return g; }
var n = Instantiate(prefab); pool.Add(n); return n;
}
public void Release(GameObject g) { g.SetActive(false); }
}
【用法】爆炸时 pool.Get() 取一个 → 用完后协程延时 Release。
【纹理优化】贴图尺寸 2 的幂、用压缩格式(ASTC/ETC2)、关 Mipmap(UI/特效不需要远景)。
【批处理】同材质、同 Shader 的特效尽量合并(图集,第 41 课)。
【LOD】远处特效降低细节(可选)。
【完成】特效再多也流畅。
【注意】对象池释放时记得把粒子重置(ps.Clear())。
✅
对象池是“特效工厂”:预生产、循环复用、零垃圾回收。高频特效必备。
⚠
常见错误与排查
⛔
错误:
用对象池后特效变“残影”?
原因:
复用前没重置粒子
解决:
Get 时调用 ps.Clear() + ps.time=0 重置再 Play。
★
动手练习
课后小任务(做出来才算真的学会)
设置粒子上限与寿命控制
实现特效对象池
优化纹理导入设置
✓
本节小结
特效优化已掌握。下一课综合练习特效与音频整合。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
综合特效制作:技能特效
下一课 →
特效与音频整合
↑