最近在做一些辅助工具帮助特效师在开发特效的时候可以知道当前已经用了多少的粒子数,然而Unity也提供了这样的预览面板,但是看起来特别不方便。关键是很多特效都是粒子+mesh结合使用的。而且我又发现particleCount api提供获取粒子数量并不是很准,不能及时获取当前的粒子数量。
通过如下代码获取当前粒子的数量,如果特效是粒子+mesh的形式还可以把贴图数量、模型参数等信息列出来,方便特效师及时查看自己做的特效的效率。注意此段代码只能执行在编辑模式下。
using System.Reflection;
using UnityEngine;
public class Test : MonoBehaviour
{
private ParticleSystem [] m_ParticleSystems;
private MethodInfo m_CalculateEffectUIDataMethod;
private int m_ParticleCount = 0;
void Start()
{
m_ParticleSystems = GetComponentsInChildren<ParticleSystem>();
m_CalculateEffectUIDataMethod = typeof(ParticleSystem).GetMethod("CalculateEffectUIData", BindingFlags.Instance | BindingFlags.NonPublic);
}
private void Update()
{
m_ParticleCount = 0;
foreach (var ps in m_ParticleSystems)
{
int count = 0;
object[] invokeArgs = new object[] { count, 0.0f, Mathf.Infinity };
m_CalculateEffectUIDataMethod.Invoke(ps, invokeArgs);
count = (int)invokeArgs[0];
m_ParticleCount += count;
}
}
private void OnGUI()
{
GUILayout.Label(string.Format("<size=50>m_ParticleCount : {0}</size>", m_ParticleCount));
}
}
- 本文固定链接: https://www.xuanyusong.com/archives/4496
- 转载请注明: 雨松MOMO于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!


ParticleSystem 没有 CalculateEffectUIData 这个方法啊。