using UnityEngine; namespace GameFramework { /// /// 得分拾取物。 /// 玩家碰到(OnTriggerEnter + tag="Player")后加分、播音效、隐藏自身。 /// 可自动复位(可选),用于不吃豆就复活的场景。 /// public class ScorePickup : MonoBehaviour { [SerializeField] int scoreValue = 10; [SerializeField] AudioData pickUpSFX; [SerializeField] float respawnTime = 0f; // 0=不复活(永久消失) Collider pickupCollider; MeshRenderer meshRenderer; SpriteRenderer spriteRenderer; void Awake() { pickupCollider = GetComponent(); meshRenderer = GetComponentInChildren(); spriteRenderer = GetComponentInChildren(); // 确保有触发器 if (pickupCollider != null) pickupCollider.isTrigger = true; } void OnTriggerEnter(Collider other) { Debug.Log($"[ScorePickup] 触发碰撞: {other.gameObject.name}, Tag={other.tag}"); if (!other.CompareTag("Player")) return; Debug.Log($"[ScorePickup] 玩家碰撞! ScoreManager={(ScoreManager.Instance != null ? "存在" : "NULL")}"); // 加分 if (ScoreManager.Instance != null) ScoreManager.Instance.AddScore(scoreValue); else Debug.LogWarning("[ScorePickup] ScoreManager 未挂载! 请在 MainMenu 场景的空 GameObject 上挂载 ScoreManager 组件。"); // 音效 if (AudioManager.Instance != null && pickUpSFX != null) AudioManager.Instance.PlaySFX(pickUpSFX); // 隐藏/复活 if (respawnTime > 0f) { SetVisible(false); Invoke(nameof(Respawn), respawnTime); } else { gameObject.SetActive(false); } } void SetVisible(bool visible) { if (pickupCollider != null) pickupCollider.enabled = visible; if (meshRenderer != null) meshRenderer.enabled = visible; if (spriteRenderer != null) spriteRenderer.enabled = visible; } void Respawn() { SetVisible(true); } } }