添加场景、对应场景代码

This commit is contained in:
JA
2026-06-30 09:46:59 +08:00
parent eeb1907247
commit 1489f33d9d
41 changed files with 3685 additions and 9 deletions
+68
View File
@@ -0,0 +1,68 @@
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);
}
}
}