feat(fix-system): 优化损坏模块火花表现

This commit is contained in:
2026-07-16 17:50:48 +08:00
parent 3be0bf8201
commit 754d03b47d
2 changed files with 64 additions and 52 deletions
@@ -7,15 +7,15 @@ namespace AibisDream.FixSystem
{
/// <summary>
/// 模块运行状态的纯表现层:Module Pic 始终显示,文字负责常亮/闪烁/熄灭,
/// 火花依据 Module Pic 的世界包围盒生成在外围并渲染在本体下层。
/// 火花依据 Module Pic 的世界包围盒收束在底边,并渲染在本体下层。
/// </summary>
public class ModuleConditionVisual : MonoBehaviour
{
private static readonly Vector2[] SparkDirections =
{
new(-1f, -1f), new(0f, -1f), new(1f, -1f),
new(-1f, 0f), new(1f, 0f),
new(-1f, 1f), new(0f, 1f), new(1f, 1f)
new(-0.5f, -0.86f),
new(0f, -0.86f),
new(0.5f, -0.86f)
};
[Header("模块引用")]
@@ -28,15 +28,16 @@ namespace AibisDream.FixSystem
[Header("损坏火花")]
[SerializeField] private VisualEffectAsset sparkAsset;
[SerializeField, Min(0.01f)] private float sparkMinInterval = 0.35f;
[SerializeField, Min(0.01f)] private float sparkMaxInterval = 1.2f;
[SerializeField, Min(0f)] private float sparkBoundsPadding = 0.06f;
[SerializeField] private Vector2 sparkBoundsScale = Vector2.one;
[SerializeField, Min(0.01f)] private float sparkMinInterval = 0.3f;
[SerializeField, Min(0.01f)] private float sparkMaxInterval = 1f;
[SerializeField, Min(0f)] private float sparkBoundsPadding = 0.01f;
[SerializeField] private Vector2 sparkBoundsScale = new(0.9f, 0.92f);
[SerializeField] private Vector2 sparkCenterOffset = Vector2.zero;
[SerializeField] private Vector2 sparkBurstCount = new(2f, 5f);
[SerializeField] private Vector2 sparkLifetime = new(0.08f, 0.22f);
[SerializeField] private Vector2 sparkSizeFactor = new(0.025f, 0.055f);
[SerializeField, Min(0f)] private float sparkVelocityFactor = 1.5f;
[SerializeField] private Vector2 sparkBurstCount = new(3f, 6f);
[SerializeField] private Vector2 sparkLifetime = new(0.1f, 0.24f);
[SerializeField] private Vector2 sparkSizeFactor = new(0.032f, 0.065f);
[SerializeField, Min(0.01f)] private float sparkWidth = 0.45f;
[SerializeField, Min(0f)] private float sparkVelocityFactor = 0.9f;
private readonly List<VisualEffect> _sparkEmitters = new();
private Coroutine _textFlickerCoroutine;
@@ -228,6 +229,8 @@ namespace AibisDream.FixSystem
effect.SetVector2("Lifetime Min/Max", sparkLifetime);
if (effect.HasVector2("Size Min/Max"))
effect.SetVector2("Size Min/Max", sparkSizeFactor * sizeBase);
if (effect.HasFloat("Sparkle Width"))
effect.SetFloat("Sparkle Width", sparkWidth);
if (effect.HasVector3("Initial Velocity_vector"))
{
var speed = sizeBase * sparkVelocityFactor;