69 lines
1.9 KiB
C#
69 lines
1.9 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=不复活(永久消失)
|
|
|
|
[Header("Auto Assign")]
|
|
[SerializeField] bool findScoreManagerAutomatically = true;
|
|
|
|
Collider pickupCollider;
|
|
MeshRenderer meshRenderer;
|
|
|
|
void Awake()
|
|
{
|
|
pickupCollider = GetComponent<Collider>();
|
|
meshRenderer = GetComponentInChildren<MeshRenderer>();
|
|
// 确保有触发器
|
|
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);
|
|
}
|
|
}
|
|
}
|