优化整体流程和修复HUD数值更新BUG
This commit is contained in:
@@ -0,0 +1,205 @@
|
|||||||
|
# 灵灯碰触流程重构
|
||||||
|
|
||||||
|
## Task 1: 灵灯只伤害第一个碰到的敌人
|
||||||
|
|
||||||
|
修改 `Assets/eco/SpiritLantern.cs` 的 `OnTriggerEnter`:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
private void OnTriggerEnter(Collider other)
|
||||||
|
{
|
||||||
|
if (_recalled) return; // 新增:已触发则忽略后续碰撞
|
||||||
|
if (other.CompareTag("Player")) return;
|
||||||
|
HealthSystem health = other.GetComponent<HealthSystem>();
|
||||||
|
if (health != null)
|
||||||
|
{
|
||||||
|
health.Damage(damageOnContact);
|
||||||
|
StartRecallSequence(); // 改名原 Recall(),改为协程流程
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Task 2: 灵灯 2s 渐隐消失 + 灯光同步消失
|
||||||
|
|
||||||
|
修改 `Assets/eco/SpiritLantern.cs`,将 `Recall()` 改为分阶段流程:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
private void StartRecallSequence()
|
||||||
|
{
|
||||||
|
if (_recalled) return;
|
||||||
|
_recalled = true;
|
||||||
|
// 1. 立即取消事件订阅 + 通知系统(回收灵灯名额)
|
||||||
|
if (_ownerSystem != null) _ownerSystem.UnregisterLantern(this);
|
||||||
|
OnLanternRecalled?.Invoke();
|
||||||
|
OnLanternRecalled = null;
|
||||||
|
// 2. 禁用碰撞体,开始 2s 渐隐
|
||||||
|
GetComponent<Collider>().enabled = false;
|
||||||
|
StartCoroutine(FadeOutAndDestroy(2f));
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator FadeOutAndDestroy(float duration)
|
||||||
|
{
|
||||||
|
var sr = GetComponent<SpriteRenderer>();
|
||||||
|
var light = GetComponent<LightSource>();
|
||||||
|
float startAlpha = sr != null ? sr.color.a : 1f;
|
||||||
|
float startIntensity = light != null ? light.Intensity : 1f;
|
||||||
|
float elapsed = 0f;
|
||||||
|
while (elapsed < duration)
|
||||||
|
{
|
||||||
|
elapsed += Time.deltaTime;
|
||||||
|
float t = elapsed / duration;
|
||||||
|
if (sr != null)
|
||||||
|
sr.color = new Color(sr.color.r, sr.color.g, sr.color.b, Mathf.Lerp(startAlpha, 0f, t));
|
||||||
|
if (light != null)
|
||||||
|
light.SetIntensity(Mathf.Lerp(startIntensity, 0f, t));
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
Destroy(gameObject);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
同时修改超时回收(`lifetime <= 0` 时)也走 `StartRecallSequence()` 而非直接销毁。
|
||||||
|
|
||||||
|
## Task 3: 敌人被灵灯杀死时的消失特效 + 魂灵掉落
|
||||||
|
|
||||||
|
修改 `Assets/eco/SpiritLantern.cs` 的 `OnTriggerEnter`,在调用 `health.Damage()` 之前读取敌人 maxHealth 并保存敌人位置:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
private void OnTriggerEnter(Collider other)
|
||||||
|
{
|
||||||
|
if (_recalled) return;
|
||||||
|
if (other.CompareTag("Player")) return;
|
||||||
|
HealthSystem health = other.GetComponent<HealthSystem>();
|
||||||
|
if (health != null)
|
||||||
|
{
|
||||||
|
// 在伤害前记录信息(用于掉落)
|
||||||
|
Vector3 deathPos = other.transform.position;
|
||||||
|
int enemyMaxHp = GetMaxHealth(health);
|
||||||
|
health.Damage(damageOnContact);
|
||||||
|
// 如果敌人死亡(血量<=0),生成魂灵掉落
|
||||||
|
// 注意:Die() 会 Destroy gameObject,所以位置已提前保存
|
||||||
|
if (health health <= 0) // 需要用反射或公开属性判断
|
||||||
|
SpawnSoulDrops(deathPos, enemyMaxHp);
|
||||||
|
StartRecallSequence();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
由于 `HealthSystem.health` 是 private,需要在 HealthSystem 中添加一个公开属性:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
// HealthSystem.cs 新增
|
||||||
|
public bool IsDead => _isDead;
|
||||||
|
public int MaxHealth => maxHealth;
|
||||||
|
```
|
||||||
|
|
||||||
|
然后改为:
|
||||||
|
```csharp
|
||||||
|
health.Damage(damageOnContact);
|
||||||
|
if (health.IsDead)
|
||||||
|
SpawnSoulDrops(deathPos, health.MaxHealth);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Task 4: 创建魂灵掉落物脚本 `SoulDrop.cs`
|
||||||
|
|
||||||
|
新建 `Assets/eco/SoulDrop.cs`:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public class SoulDrop : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField] private float flyDuration = 0.8f;
|
||||||
|
[SerializeField] private int scoreValue = 1;
|
||||||
|
|
||||||
|
private RectTransform _targetUI; // HUD 魂灵图标位置
|
||||||
|
|
||||||
|
public void Initialize(RectTransform targetUI)
|
||||||
|
{
|
||||||
|
_targetUI = targetUI;
|
||||||
|
StartCoroutine(FlyToHUD());
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator FlyToHUD()
|
||||||
|
{
|
||||||
|
Vector3 startPos = transform.position;
|
||||||
|
// 获取目标屏幕位置
|
||||||
|
Camera cam = Camera.main;
|
||||||
|
Vector3 targetScreenPos = new Vector3(_targetUI.position.x, _targetUI.position.y, cam.WorldToScreenPoint(startPos).z);
|
||||||
|
Vector3 targetWorldPos = cam.ScreenToWorldPoint(targetScreenPos);
|
||||||
|
|
||||||
|
float elapsed = 0f;
|
||||||
|
while (elapsed < flyDuration)
|
||||||
|
{
|
||||||
|
elapsed += Time.deltaTime;
|
||||||
|
float t = elapsed / flyDuration;
|
||||||
|
// 抛物线轨迹
|
||||||
|
transform.position = Vector3.Lerp(startPos, targetWorldPos, t);
|
||||||
|
transform.localScale = Vector3.one * (1f - t * 0.5f); // 缩小
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
// 到达 HUD,加分
|
||||||
|
if (ScoreManager.Instance != null)
|
||||||
|
ScoreManager.Instance.AddScore(scoreValue);
|
||||||
|
Destroy(gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Task 5: 魂灵掉落物生成逻辑
|
||||||
|
|
||||||
|
在 `SpiritLantern.cs` 中添加:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
[SerializeField] private GameObject soulDropPrefab;
|
||||||
|
|
||||||
|
private void SpawnSoulDrops(Vector3 position, int enemyMaxHp)
|
||||||
|
{
|
||||||
|
int count = enemyMaxHp * Random.Range(2, 6); // 2~5倍
|
||||||
|
RectTransform hudTarget = GameHUD.SoulIconRect; // 静态引用
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
Vector3 offset = new Vector3(Random.Range(-0.3f, 0.3f), Random.Range(0f, 0.3f), Random.Range(-0.3f, 0.3f));
|
||||||
|
GameObject drop = Instantiate(soulDropPrefab, position + offset, Quaternion.identity);
|
||||||
|
SoulDrop soul = drop.GetComponent<SoulDrop>();
|
||||||
|
if (soul != null)
|
||||||
|
soul.Initialize(hudTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Task 6: GameHUD 暴露魂灵图标 RectTransform
|
||||||
|
|
||||||
|
修改 `Assets/UI/GameHUD.cs`,添加静态引用:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public static RectTransform SoulIconRect { get; private set; }
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
// ... 现有代码 ...
|
||||||
|
if (soulIcon != null)
|
||||||
|
SoulIconRect = soulIcon.rectTransform;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Task 7: 创建魂灵掉落物预制体
|
||||||
|
|
||||||
|
- 创建一个小精灵 GameObject(SpriteRenderer + Collider2D trigger + SoulDrop 脚本)
|
||||||
|
- 保存为 `Assets/eco/Prefabs/SoulDrop.prefab`
|
||||||
|
- 将预制体引用赋给 SpiritLantern.prefab 的 `soulDropPrefab` 字段
|
||||||
|
|
||||||
|
## Task 8: 创建魂灵掉落物 Sprite 资源
|
||||||
|
|
||||||
|
- 使用 `ImageGen` 工具生成一个小光点/魂灵图标
|
||||||
|
- 导入 Unity 并赋给 SoulDrop.prefab 的 SpriteRenderer
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 涉及文件汇总
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Assets/eco/SpiritLantern.cs` | 重构碰撞+渐隐+掉落逻辑 |
|
||||||
|
| `Assets/2.5D Engine/Scripts/HealthSystem.cs` | 新增 `IsDead`、`MaxHealth` 公开属性 |
|
||||||
|
| `Assets/UI/GameHUD.cs` | 新增 `SoulIconRect` 静态属性 |
|
||||||
|
| `Assets/eco/SoulDrop.cs` | **新建** 魂灵掉落物脚本 |
|
||||||
|
| `Assets/eco/Prefabs/SoulDrop.prefab` | **新建** 魂灵掉落物预制体 |
|
||||||
|
| `Assets/eco/Prefabs/SpiritLantern.prefab` | 新增 `soulDropPrefab` 引用 |
|
||||||
@@ -78,16 +78,20 @@ namespace IndianOceanAssets.Engine2_5D
|
|||||||
// Handles death logic and effects
|
// Handles death logic and effects
|
||||||
public void Die()
|
public void Die()
|
||||||
{
|
{
|
||||||
|
Debug.Log($"[HealthSystem] Die() called on {gameObject.name}, dissolveMaterial={(dissolveMaterial != null ? dissolveMaterial.name : "NULL")}");
|
||||||
|
|
||||||
if (deathEffect != null)
|
if (deathEffect != null)
|
||||||
Instantiate(deathEffect, transform.position + new Vector3(0f, .5f, 0f), Quaternion.identity);
|
Instantiate(deathEffect, transform.position + new Vector3(0f, .5f, 0f), Quaternion.identity);
|
||||||
|
|
||||||
// 如果有溶解材质,播放消隐动画后再销毁
|
// 如果有溶解材质,播放消隐动画后再销毁
|
||||||
if (dissolveMaterial != null)
|
if (dissolveMaterial != null)
|
||||||
{
|
{
|
||||||
|
Debug.Log($"[HealthSystem] Starting DissolveAndDestroy coroutine on {gameObject.name}");
|
||||||
StartCoroutine(DissolveAndDestroy());
|
StartCoroutine(DissolveAndDestroy());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Debug.Log($"[HealthSystem] No dissolve material, destroying {gameObject.name} immediately");
|
||||||
Destroy(gameObject);
|
Destroy(gameObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,6 +101,8 @@ namespace IndianOceanAssets.Engine2_5D
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private IEnumerator DissolveAndDestroy()
|
private IEnumerator DissolveAndDestroy()
|
||||||
{
|
{
|
||||||
|
Debug.Log($"[HealthSystem] DissolveAndDestroy START on {gameObject.name}");
|
||||||
|
|
||||||
// 禁用碰撞体和刚体,防止死亡过程中仍能触发碰撞或受重力下坠
|
// 禁用碰撞体和刚体,防止死亡过程中仍能触发碰撞或受重力下坠
|
||||||
foreach (var col in GetComponents<Collider>())
|
foreach (var col in GetComponents<Collider>())
|
||||||
col.enabled = false;
|
col.enabled = false;
|
||||||
@@ -114,15 +120,30 @@ namespace IndianOceanAssets.Engine2_5D
|
|||||||
mb.enabled = false;
|
mb.enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换所有 SpriteRenderer 到溶解材质
|
// 等一帧,确保禁用生效
|
||||||
|
yield return null;
|
||||||
|
|
||||||
|
// 切换所有 SpriteRenderer 到溶解材质(保留原始纹理和颜色)
|
||||||
var renderers = GetComponentsInChildren<SpriteRenderer>();
|
var renderers = GetComponentsInChildren<SpriteRenderer>();
|
||||||
var originalMats = new Material[renderers.Length][];
|
Debug.Log($"[HealthSystem] DissolveAndDestroy: {renderers.Length} SpriteRenderers on {gameObject.name}");
|
||||||
|
|
||||||
for (int i = 0; i < renderers.Length; i++)
|
for (int i = 0; i < renderers.Length; i++)
|
||||||
{
|
{
|
||||||
originalMats[i] = renderers[i].materials;
|
// 创建溶解材质实例,并复制原始纹理 + 颜色
|
||||||
renderers[i].materials = new Material[] { new Material(dissolveMaterial) };
|
var dissolveMat = new Material(dissolveMaterial);
|
||||||
|
if (renderers[i].sprite != null)
|
||||||
|
dissolveMat.mainTexture = renderers[i].sprite.texture;
|
||||||
|
dissolveMat.SetColor("_Color", renderers[i].color);
|
||||||
|
dissolveMat.SetFloat("_DissolveAmount", 0f);
|
||||||
|
|
||||||
|
renderers[i].material = dissolveMat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 再等一帧,确保材质切换生效
|
||||||
|
yield return null;
|
||||||
|
|
||||||
|
Debug.Log($"[HealthSystem] Starting dissolve animation, fadeDuration={fadeDuration}");
|
||||||
|
|
||||||
// 动画溶解
|
// 动画溶解
|
||||||
float elapsed = 0f;
|
float elapsed = 0f;
|
||||||
while (elapsed < fadeDuration)
|
while (elapsed < fadeDuration)
|
||||||
@@ -139,6 +160,7 @@ namespace IndianOceanAssets.Engine2_5D
|
|||||||
yield return null;
|
yield return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[HealthSystem] Dissolve complete, destroying {gameObject.name}");
|
||||||
Destroy(gameObject);
|
Destroy(gameObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,5 +35,5 @@ Material:
|
|||||||
- _DissolveNoiseScale: 10
|
- _DissolveNoiseScale: 10
|
||||||
m_Colors:
|
m_Colors:
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _DissolveEdgeColor: {r: 1, g: 0.8, b: 0.3, a: 1}
|
- _DissolveEdgeColor: {r: 0.3, g: 0.6, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Shader "Custom/SpriteDissolve"
|
|||||||
[Header(Dissolve)]
|
[Header(Dissolve)]
|
||||||
_DissolveAmount ("溶解进度", Range(0, 1)) = 0
|
_DissolveAmount ("溶解进度", Range(0, 1)) = 0
|
||||||
_DissolveEdgeWidth ("边缘宽度", Range(0, 0.3)) = 0.05
|
_DissolveEdgeWidth ("边缘宽度", Range(0, 0.3)) = 0.05
|
||||||
_DissolveEdgeColor ("边缘颜色", Color) = (1, 0.8, 0.3, 1)
|
_DissolveEdgeColor ("边缘颜色", Color) = (0.3, 0.6, 1, 1)
|
||||||
_DissolveNoiseScale ("噪声缩放", Float) = 10
|
_DissolveNoiseScale ("噪声缩放", Float) = 10
|
||||||
|
|
||||||
// 阴影设置(保持与项目一致)
|
// 阴影设置(保持与项目一致)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -833,7 +833,7 @@ MonoBehaviour:
|
|||||||
m_GameObject: {fileID: 956194999}
|
m_GameObject: {fileID: 956194999}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Material: {fileID: 0}
|
m_Material: {fileID: 0}
|
||||||
@@ -844,20 +844,75 @@ MonoBehaviour:
|
|||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_FontData:
|
m_text: 0
|
||||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
|
m_isRightToLeft: 0
|
||||||
m_FontSize: 36
|
m_fontAsset: {fileID: 11400000, guid: 7b2d3c4c2e857f14aaa0e7fb9ebab7e5, type: 2}
|
||||||
m_FontStyle: 0
|
m_sharedMaterial: {fileID: -1264883736430894452, guid: 7b2d3c4c2e857f14aaa0e7fb9ebab7e5, type: 2}
|
||||||
m_BestFit: 0
|
m_fontSharedMaterials: []
|
||||||
m_MinSize: 10
|
m_fontMaterial: {fileID: 0}
|
||||||
m_MaxSize: 40
|
m_fontMaterials: []
|
||||||
m_Alignment: 4
|
m_fontColor32:
|
||||||
m_AlignByGeometry: 0
|
serializedVersion: 2
|
||||||
m_RichText: 1
|
rgba: 4287124462
|
||||||
m_HorizontalOverflow: 1
|
m_fontColor: {r: 0.93333334, g: 0.3254902, b: 0.53333336, a: 1}
|
||||||
m_VerticalOverflow: 1
|
m_enableVertexGradient: 0
|
||||||
m_LineSpacing: 1
|
m_colorMode: 3
|
||||||
m_Text: 0
|
m_fontColorGradient:
|
||||||
|
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_fontColorGradientPreset: {fileID: 0}
|
||||||
|
m_spriteAsset: {fileID: 0}
|
||||||
|
m_tintAllSprites: 0
|
||||||
|
m_StyleSheet: {fileID: 0}
|
||||||
|
m_TextStyleHashCode: -1183493901
|
||||||
|
m_overrideHtmlColors: 0
|
||||||
|
m_faceColor:
|
||||||
|
serializedVersion: 2
|
||||||
|
rgba: 4294967295
|
||||||
|
m_fontSize: 69.9
|
||||||
|
m_fontSizeBase: 69.9
|
||||||
|
m_fontWeight: 400
|
||||||
|
m_enableAutoSizing: 0
|
||||||
|
m_fontSizeMin: 18
|
||||||
|
m_fontSizeMax: 72
|
||||||
|
m_fontStyle: 0
|
||||||
|
m_HorizontalAlignment: 2
|
||||||
|
m_VerticalAlignment: 512
|
||||||
|
m_textAlignment: 65535
|
||||||
|
m_characterSpacing: 0
|
||||||
|
m_wordSpacing: 0
|
||||||
|
m_lineSpacing: 0
|
||||||
|
m_lineSpacingMax: 0
|
||||||
|
m_paragraphSpacing: 0
|
||||||
|
m_charWidthMaxAdj: 0
|
||||||
|
m_enableWordWrapping: 1
|
||||||
|
m_wordWrappingRatios: 0.4
|
||||||
|
m_overflowMode: 0
|
||||||
|
m_linkedTextComponent: {fileID: 0}
|
||||||
|
parentLinkedComponent: {fileID: 0}
|
||||||
|
m_enableKerning: 0
|
||||||
|
m_enableExtraPadding: 0
|
||||||
|
checkPaddingRequired: 0
|
||||||
|
m_isRichText: 1
|
||||||
|
m_parseCtrlCharacters: 1
|
||||||
|
m_isOrthographic: 1
|
||||||
|
m_isCullingEnabled: 0
|
||||||
|
m_horizontalMapping: 0
|
||||||
|
m_verticalMapping: 0
|
||||||
|
m_uvLineOffset: 0
|
||||||
|
m_geometrySortingOrder: 0
|
||||||
|
m_IsTextObjectScaleStatic: 0
|
||||||
|
m_VertexBufferAutoSizeReduction: 0
|
||||||
|
m_useMaxVisibleDescender: 1
|
||||||
|
m_pageToDisplay: 1
|
||||||
|
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_isUsingLegacyAnimationComponent: 0
|
||||||
|
m_isVolumetricText: 0
|
||||||
|
m_hasFontAssetChanged: 0
|
||||||
|
m_baseMaterial: {fileID: 0}
|
||||||
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
--- !u!1 &963194225
|
--- !u!1 &963194225
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -1136,12 +1191,8 @@ MonoBehaviour:
|
|||||||
lineSprite: {fileID: 21300000, guid: c9f1fae21aac59242836f5e4529afa17, type: 3}
|
lineSprite: {fileID: 21300000, guid: c9f1fae21aac59242836f5e4529afa17, type: 3}
|
||||||
bgPointImage: {fileID: 165255196}
|
bgPointImage: {fileID: 165255196}
|
||||||
bgPointSprite: {fileID: 21300000, guid: 661924bcc4d953349baa740051ca9895, type: 3}
|
bgPointSprite: {fileID: 21300000, guid: 661924bcc4d953349baa740051ca9895, type: 3}
|
||||||
submitSFX:
|
submitSFX: {fileID: 0}
|
||||||
audioClip: {fileID: 0}
|
cancelSFX: {fileID: 0}
|
||||||
volume: 1
|
|
||||||
cancelSFX:
|
|
||||||
audioClip: {fileID: 0}
|
|
||||||
volume: 1
|
|
||||||
--- !u!114 &1828901353
|
--- !u!114 &1828901353
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -1200,7 +1251,7 @@ Canvas:
|
|||||||
m_OverridePixelPerfect: 0
|
m_OverridePixelPerfect: 0
|
||||||
m_SortingBucketNormalizedSize: 0
|
m_SortingBucketNormalizedSize: 0
|
||||||
m_VertexColorAlwaysGammaSpace: 0
|
m_VertexColorAlwaysGammaSpace: 0
|
||||||
m_AdditionalShaderChannelsFlag: 0
|
m_AdditionalShaderChannelsFlag: 25
|
||||||
m_UpdateRectTransformForStandalone: 0
|
m_UpdateRectTransformForStandalone: 0
|
||||||
m_SortingLayerID: 0
|
m_SortingLayerID: 0
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -91,6 +91,15 @@ namespace GameFramework
|
|||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
|
// 延迟订阅 ScoreManager(跨场景后 ScoreManager 可能才创建)
|
||||||
|
if (!_subscribedScoreEvent && ScoreManager.Instance != null)
|
||||||
|
{
|
||||||
|
ScoreManager.onScoreChanged += UpdateSoulCount;
|
||||||
|
_subscribedScoreEvent = true;
|
||||||
|
UpdateSoulCount(ScoreManager.Instance.CurrentScore);
|
||||||
|
Debug.Log("[GameHUD] 延迟订阅 ScoreManager.onScoreChanged 成功");
|
||||||
|
}
|
||||||
|
|
||||||
UpdateLifeIcons();
|
UpdateLifeIcons();
|
||||||
UpdateSkillCooldowns();
|
UpdateSkillCooldowns();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
using TMPro;
|
||||||
|
|
||||||
namespace GameFramework
|
namespace GameFramework
|
||||||
{
|
{
|
||||||
@@ -22,7 +23,7 @@ namespace GameFramework
|
|||||||
[SerializeField] private GameObject winPanel;
|
[SerializeField] private GameObject winPanel;
|
||||||
[SerializeField] private Image winTitleImage; // "你做到了" 图片
|
[SerializeField] private Image winTitleImage; // "你做到了" 图片
|
||||||
[SerializeField] private Sprite winTitleSprite; // nizuodaol.png
|
[SerializeField] private Sprite winTitleSprite; // nizuodaol.png
|
||||||
[SerializeField] private Text soulCountText; // 魂灵数量
|
[SerializeField] private TextMeshProUGUI soulCountText; // 魂灵数量
|
||||||
[SerializeField] private Image soulCountBgImage; // 魂灵数量底图
|
[SerializeField] private Image soulCountBgImage; // 魂灵数量底图
|
||||||
[SerializeField] private Sprite soulCountBgSprite; // bgpoint.png
|
[SerializeField] private Sprite soulCountBgSprite; // bgpoint.png
|
||||||
[SerializeField] private Image newRecordImage; // "新记录" 图片
|
[SerializeField] private Image newRecordImage; // "新记录" 图片
|
||||||
@@ -38,7 +39,7 @@ namespace GameFramework
|
|||||||
[Header("排行榜")]
|
[Header("排行榜")]
|
||||||
[SerializeField] private GameObject leaderboardPanel;
|
[SerializeField] private GameObject leaderboardPanel;
|
||||||
[SerializeField] private Transform leaderboardContainer;
|
[SerializeField] private Transform leaderboardContainer;
|
||||||
[SerializeField] private Text finalScoreText;
|
[SerializeField] private TextMeshProUGUI finalScoreText;
|
||||||
|
|
||||||
[Header("新纪录输入")]
|
[Header("新纪录输入")]
|
||||||
[SerializeField] private GameObject newHighScorePanel;
|
[SerializeField] private GameObject newHighScorePanel;
|
||||||
@@ -284,8 +285,11 @@ namespace GameFramework
|
|||||||
|
|
||||||
void OnMainMenuClick()
|
void OnMainMenuClick()
|
||||||
{
|
{
|
||||||
|
Time.timeScale = 1f;
|
||||||
if (SceneLoader.Instance != null)
|
if (SceneLoader.Instance != null)
|
||||||
SceneLoader.Instance.LoadMainMenuScene();
|
SceneLoader.Instance.LoadMainMenuScene();
|
||||||
|
else
|
||||||
|
UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu");
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -564,6 +564,8 @@ MonoBehaviour:
|
|||||||
maxHealth: 3
|
maxHealth: 3
|
||||||
deathEffect: {fileID: 0}
|
deathEffect: {fileID: 0}
|
||||||
isPlayer: 0
|
isPlayer: 0
|
||||||
|
dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2}
|
||||||
|
fadeDuration: 2
|
||||||
--- !u!114 &1099825457660127417
|
--- !u!114 &1099825457660127417
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -476,6 +476,8 @@ MonoBehaviour:
|
|||||||
maxHealth: 3
|
maxHealth: 3
|
||||||
deathEffect: {fileID: 0}
|
deathEffect: {fileID: 0}
|
||||||
isPlayer: 0
|
isPlayer: 0
|
||||||
|
dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2}
|
||||||
|
fadeDuration: 2
|
||||||
--- !u!114 &6371374142521685546
|
--- !u!114 &6371374142521685546
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -564,6 +564,8 @@ MonoBehaviour:
|
|||||||
maxHealth: 3
|
maxHealth: 3
|
||||||
deathEffect: {fileID: 0}
|
deathEffect: {fileID: 0}
|
||||||
isPlayer: 0
|
isPlayer: 0
|
||||||
|
dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2}
|
||||||
|
fadeDuration: 2
|
||||||
--- !u!114 &467771591586586371
|
--- !u!114 &467771591586586371
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -476,6 +476,8 @@ MonoBehaviour:
|
|||||||
maxHealth: 3
|
maxHealth: 3
|
||||||
deathEffect: {fileID: 0}
|
deathEffect: {fileID: 0}
|
||||||
isPlayer: 0
|
isPlayer: 0
|
||||||
|
dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2}
|
||||||
|
fadeDuration: 2
|
||||||
--- !u!114 &7993147426357698
|
--- !u!114 &7993147426357698
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -353,6 +353,8 @@ MonoBehaviour:
|
|||||||
maxHealth: 3
|
maxHealth: 3
|
||||||
deathEffect: {fileID: 0}
|
deathEffect: {fileID: 0}
|
||||||
isPlayer: 0
|
isPlayer: 0
|
||||||
|
dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2}
|
||||||
|
fadeDuration: 2
|
||||||
--- !u!114 &1011900935948289768
|
--- !u!114 &1011900935948289768
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ EditorUserSettings:
|
|||||||
value: 5300055151055f5a5e0c0f27477708444515192b287124367c791f30b3b9616d
|
value: 5300055151055f5a5e0c0f27477708444515192b287124367c791f30b3b9616d
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-7:
|
RecentlyUsedSceneGuid-7:
|
||||||
value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a
|
value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-8:
|
RecentlyUsedSceneGuid-8:
|
||||||
value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b
|
value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a
|
||||||
flags: 0
|
flags: 0
|
||||||
RecentlyUsedSceneGuid-9:
|
RecentlyUsedSceneGuid-9:
|
||||||
value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e
|
value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e
|
||||||
|
|||||||
Reference in New Issue
Block a user