Files
gold_dolphin/unity/Assets/UI/ScorePickup.cs
T
2026-07-05 15:33:41 +08:00

75 lines
2.4 KiB
C#

using UnityEngine;
namespace GameFramework
{
/// <summary>
/// 得分拾取物。
/// 玩家碰到(OnTriggerEnter + tag="Player")后加分、播音效、隐藏自身。
/// 可自动复位(可选),用于不吃豆就复活的场景。
/// </summary>
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<Collider>();
meshRenderer = GetComponentInChildren<MeshRenderer>();
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
// 确保有触发器
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);
}
}
}