备份,准备做双端
This commit is contained in:
@@ -321,6 +321,22 @@ public class groundParticularController : MonoBehaviour
|
||||
Vector3 moveDir = (currentEndPos - currentStartPos).normalized;
|
||||
float totalDist = Vector3.Distance(currentStartPos, currentEndPos);
|
||||
|
||||
// 【性能】渐变色 PropertyBlock 只在发射时写一次:headColor=Evaluate(1)、tailColor=Evaluate(0)、
|
||||
// moveDir 三者对某颗粒子而言全程恒定(gradient 是配置、moveDir 发射即定、Evaluate 参数是固定的
|
||||
// 0/1),原先在 UpdateActiveParticles 每帧重写只是重复设同一组值。移到此处一次性写入,视觉完全等效,
|
||||
// 且消除每帧逐粒子 Get/SetPropertyBlock + 两次 Gradient.Evaluate(避免破坏合批的每帧开销)。
|
||||
if (selectedConfig != null && selectedConfig.Value.useGradientOverride && renderer != null)
|
||||
{
|
||||
Color headColor = selectedConfig.Value.colorGradient.Evaluate(1f);
|
||||
Color tailColor = selectedConfig.Value.colorGradient.Evaluate(0f);
|
||||
|
||||
renderer.GetPropertyBlock(_sharedPropBlock);
|
||||
_sharedPropBlock.SetColor(_headColorId, headColor);
|
||||
_sharedPropBlock.SetColor(_tailColorId, tailColor);
|
||||
_sharedPropBlock.SetVector(_moveDirId, moveDir);
|
||||
renderer.SetPropertyBlock(_sharedPropBlock);
|
||||
}
|
||||
|
||||
_activeParticles.Add(new ActiveParticle
|
||||
{
|
||||
gameObject = particle,
|
||||
@@ -389,7 +405,6 @@ public class groundParticularController : MonoBehaviour
|
||||
}
|
||||
|
||||
float effectiveBPM = Mathf.Max(currentBPM, 60f);
|
||||
MaterialPropertyBlock propBlock = _sharedPropBlock;
|
||||
|
||||
// 倒序遍历便于移除
|
||||
for (int i = _activeParticles.Count - 1; i >= 0; i--)
|
||||
@@ -408,18 +423,8 @@ public class groundParticularController : MonoBehaviour
|
||||
p.traveledDist += step;
|
||||
p.gameObject.transform.position += p.moveDir * step;
|
||||
|
||||
// 动态空间渐变色
|
||||
if (p.config != null && p.config.Value.useGradientOverride && p.renderer != null)
|
||||
{
|
||||
Color headColor = p.config.Value.colorGradient.Evaluate(1f);
|
||||
Color tailColor = p.config.Value.colorGradient.Evaluate(0f);
|
||||
|
||||
p.renderer.GetPropertyBlock(propBlock);
|
||||
propBlock.SetColor(_headColorId, headColor);
|
||||
propBlock.SetColor(_tailColorId, tailColor);
|
||||
propBlock.SetVector(_moveDirId, p.moveDir);
|
||||
p.renderer.SetPropertyBlock(propBlock);
|
||||
}
|
||||
// 渐变色 PropertyBlock 已在 Emit() 发射时一次性写入(headColor/tailColor/moveDir 全程恒定),
|
||||
// 此处无需每帧重写——移除后视觉完全等效,消除每帧逐粒子 Get/SetPropertyBlock + 双 Evaluate 开销。
|
||||
|
||||
// 到达终点:回收
|
||||
if (p.traveledDist >= p.totalDist)
|
||||
|
||||
Reference in New Issue
Block a user