多轮审查和修复
This commit is contained in:
61
Assets/Scripts/World/BreadcrumbTracker.cs
Normal file
61
Assets/Scripts/World/BreadcrumbTracker.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BaseGames.World
|
||||
{
|
||||
/// <summary>
|
||||
/// 玩家面包屑轨迹追踪器(架构 21_LiquidPuzzleModule §15)。
|
||||
/// 每 RecordInterval 秒记录一次玩家位置(仅当移动距离超过 MinMoveDistance 时)。
|
||||
/// 最多保存 MaxCrumbs 个历史位置,超出后移除最旧的。
|
||||
/// </summary>
|
||||
public class BreadcrumbTracker : MonoBehaviour
|
||||
{
|
||||
[SerializeField, Min(0.1f)] private float _recordInterval = 2f;
|
||||
[SerializeField, Min(1)] private int _maxCrumbs = 20;
|
||||
[SerializeField, Min(0.1f)] private float _minMoveDistance = 1f;
|
||||
|
||||
private readonly Queue<Vector2> _crumbs = new();
|
||||
private Vector2 _lastPos;
|
||||
private float _timer;
|
||||
|
||||
private Transform _playerTransform;
|
||||
|
||||
// ── Unity 生命周期 ────────────────────────────────────────────────
|
||||
private void Awake()
|
||||
{
|
||||
var go = GameObject.FindWithTag("Player");
|
||||
if (go != null) _playerTransform = go.transform;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_playerTransform == null) return;
|
||||
|
||||
_timer += Time.deltaTime;
|
||||
if (_timer < _recordInterval) return;
|
||||
_timer = 0f;
|
||||
|
||||
Vector2 pos = _playerTransform.position;
|
||||
if (_crumbs.Count > 0 && Vector2.Distance(pos, _lastPos) < _minMoveDistance)
|
||||
return;
|
||||
|
||||
_crumbs.Enqueue(pos);
|
||||
_lastPos = pos;
|
||||
|
||||
while (_crumbs.Count > _maxCrumbs)
|
||||
_crumbs.Dequeue();
|
||||
}
|
||||
|
||||
// ── 公共 API ──────────────────────────────────────────────────────
|
||||
/// <summary>返回最近 count 个面包屑位置(从旧到新排列)。</summary>
|
||||
public IReadOnlyList<Vector2> GetRecentCrumbs(int count)
|
||||
{
|
||||
var result = new List<Vector2>(_crumbs);
|
||||
if (result.Count <= count) return result;
|
||||
return result.GetRange(result.Count - count, count);
|
||||
}
|
||||
|
||||
/// <summary>清空全部轨迹记录(如死亡后重生时调用)。</summary>
|
||||
public void Clear() => _crumbs.Clear();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user