长音符再修复 加入了关卡连接 优化了一些默认加载

This commit is contained in:
FloatGaming
2026-01-13 11:22:39 +08:00
parent 2738089af1
commit 2f9d4aae0c
426 changed files with 299413 additions and 1050 deletions
@@ -6,12 +6,12 @@ public class HoldNoteController : MonoBehaviour
private bool isInsideJudgeZone = false;
public event Action<bool> OnJudgeZoneChanged;
private bool isMoving = false;
private float speed = 0f; // 音符下落速度
private float activationTime; // 用于延迟启用下落
private float speed = 0f; // 运动速度
private float activationTime; // 何时开始移动(Time.time 基准)
private void Update()
{
// **控制音符下落**
// 到达激活时间后开始移动
if (!isMoving && Time.time >= activationTime)
{
isMoving = true;
@@ -22,30 +22,40 @@ public class HoldNoteController : MonoBehaviour
transform.Translate(Vector3.down * speed * Time.deltaTime);
}
}
/// <summary>
/// 设置音符延迟下落的时间
/// 设置该段的“到达判定线的目标时间”(hitTime) 与分段延迟(delay),并由此推导移动开始时间
/// 注意:这里必须使用与 HoldNote.hitTime 一致的时间基准(NoteSpawner 传入的谱面实时点),
/// 否则用 Time.time + delay 会在首段/暂停/开歌延迟时产生系统性错位,导致永远 Miss。
/// </summary>
public void SetSegmentDelay(float segmentDelay)
public void ConfigureTiming(float baseHitTime, float segmentDelay, float travelTime)
{
activationTime = Time.time + segmentDelay;
// baseHitTime = startTime + noteData.time (+ globalHitDelay)
float hitTime = baseHitTime + segmentDelay;
activationTime = hitTime - travelTime;
isMoving = false;
}
/// <summary>
/// 设置音符的下落速度
/// 兼容旧接口:不推荐。旧版用 Time.time 会导致时间基准不一致。
/// </summary>
public void SetSegmentDelay(float segmentDelay)
{
// Fallback to old behavior if caller didn't use ConfigureTiming.
activationTime = Time.time + segmentDelay;
isMoving = false;
}
public void SetSpeed(float newSpeed)
{
speed = newSpeed;
}
/// <summary>
/// 停止音符下落(当音符被击中或Miss时)
/// </summary>
public void StopMovement()
{
isMoving = false;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (!collision.CompareTag("JudgmentLine")) return;
@@ -66,4 +76,7 @@ public class HoldNoteController : MonoBehaviour
{
return isInsideJudgeZone;
}
public float ActivationTime => activationTime;
public float CurrentSpeed => speed;
}