备份,准备做双端

This commit is contained in:
2026-07-30 23:15:58 +08:00
parent add675e45d
commit ec4ec53545
88 changed files with 4050 additions and 872 deletions
@@ -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)