using UnityEngine; namespace GameFramework { /// /// 得分拾取物。 /// 玩家碰到(OnTriggerEnter + tag="Player")后加分、播音效、隐藏自身。 /// 可自动复位(可选),用于不吃豆就复活的场景。 /// public class ScorePickup : MonoBehaviour { [SerializeField] int scoreValue = 10; [SerializeField] AudioData pickUpSFX; [SerializeField] float respawnTime = 0f; // 0=不复活(永久消失) [Header("Auto Assign")] [SerializeField] bool findScoreManagerAutomatically = true; Collider pickupCollider; MeshRenderer meshRenderer; void Awake() { pickupCollider = GetComponent(); meshRenderer = GetComponentInChildren(); // 确保有触发器 if (pickupCollider != null) pickupCollider.isTrigger = true; } void OnTriggerEnter(Collider other) { if (!other.CompareTag("Player")) return; // 加分 if (ScoreManager.Instance != null) ScoreManager.Instance.AddScore(scoreValue); // 音效 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; } void Respawn() { SetVisible(true); } } }