75 lines
2.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|