feat(open): 支持按记忆模块切换电击闪烁图
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -26,7 +26,10 @@ public class ShockSystem : MonoBehaviour, IInteraction
|
||||
[SerializeField] private SpriteRenderer flashHeadSpriteRenderer; // 头部闪烁精灵渲染器
|
||||
[SerializeField] private SpriteRenderer flashBackgroundSpriteRenderer; // 背景闪烁精灵渲染器
|
||||
[SerializeField] private SpriteRenderer flashSpriteRenderer;
|
||||
[SerializeField] private List<Sprite> flashHeadSprites; // 头部闪烁精灵列表
|
||||
[SerializeField] private List<Sprite> flashHeadSprites; // 当前生效的头部闪烁精灵列表(运行时由两套资源切换)
|
||||
[SerializeField] private List<Sprite> flashHeadSpritesWithMemory; // 切割记忆模块前:带记忆模块
|
||||
[SerializeField] private List<Sprite> flashHeadSpritesWithoutMemory; // 切割记忆模块后:不带记忆模块
|
||||
[SerializeField] private bool useMemoryModuleFlashSprites = true; // 是否使用带记忆模块的电击图
|
||||
[SerializeField] private SpriteFlashSystem spriteFlashSystem; // Sprite闪烁系统
|
||||
[SerializeField] private GameObject sparkEffect1; // 火花特效1
|
||||
[SerializeField] private GameObject sparkEffect2; // 火花特效2
|
||||
@@ -202,6 +205,45 @@ public class ShockSystem : MonoBehaviour, IInteraction
|
||||
// 确保火花效果初始状态为关闭
|
||||
if (sparkEffect1 != null) sparkEffect1.SetActive(false);
|
||||
if (sparkEffect2 != null) sparkEffect2.SetActive(false);
|
||||
|
||||
ApplyFlashHeadSpriteSet(useMemoryModuleFlashSprites);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 切换电击闪烁用的头部图集:切割记忆模块前用带模块图,切后用不带模块图。
|
||||
/// </summary>
|
||||
public void SetUseMemoryModuleFlashSprites(bool useMemoryModule)
|
||||
{
|
||||
ApplyFlashHeadSpriteSet(useMemoryModule);
|
||||
}
|
||||
|
||||
private void ApplyFlashHeadSpriteSet(bool useMemoryModule)
|
||||
{
|
||||
useMemoryModuleFlashSprites = useMemoryModule;
|
||||
var source = useMemoryModule ? flashHeadSpritesWithMemory : flashHeadSpritesWithoutMemory;
|
||||
if (source != null && source.Count > 0)
|
||||
{
|
||||
flashHeadSprites = source;
|
||||
}
|
||||
#if UNITY_EDITOR
|
||||
else
|
||||
{
|
||||
Debug.LogWarning(
|
||||
$"[ShockSystem] {(useMemoryModule ? "带记忆" : "不带记忆")}电击闪烁图列表为空,仍使用当前 flashHeadSprites。",
|
||||
this);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按 Yarn $gameStage 同步图集:1–2 带记忆模块,≥3(已切除)不带。兼容读档。
|
||||
/// </summary>
|
||||
private void SyncFlashSpritesFromYarnState()
|
||||
{
|
||||
var storage = YarnVariableStorage.Instance;
|
||||
if (storage == null) return;
|
||||
if (!storage.TryGetValue("$gameStage", out float stage)) return;
|
||||
ApplyFlashHeadSpriteSet(stage < 3f);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
@@ -426,6 +468,8 @@ public class ShockSystem : MonoBehaviour, IInteraction
|
||||
|
||||
public IEnumerator StartShock()
|
||||
{
|
||||
SyncFlashSpritesFromYarnState();
|
||||
|
||||
// 移动左右电击装置到各自的目标位置
|
||||
var moveLeft = leftShockDevice.DOLocalMove(leftShockDeviceTargetPos, moveDuration);
|
||||
var moveRight = rightShockDevice.DOLocalMove(rightShockDeviceTargetPos, moveDuration);
|
||||
@@ -549,6 +593,8 @@ public class ShockSystem : MonoBehaviour, IInteraction
|
||||
|
||||
public IEnumerator PlayFlashEffect()
|
||||
{
|
||||
SyncFlashSpritesFromYarnState();
|
||||
|
||||
if (flashSequence != null)
|
||||
{
|
||||
flashSequence.Kill();
|
||||
|
||||
Reference in New Issue
Block a user