任务失败, 该分支已经废弃

This commit is contained in:
2025-12-02 10:15:29 +08:00
parent cccf1f7577
commit b1a2d959c7
3 changed files with 141 additions and 10 deletions

View File

@@ -293,7 +293,7 @@ using (Profiler.BeginZone("BurstJob.Schedule"))
每个Phase完成后打tag必要时可回滚
# 当前执行步骤:
"阶段3.5 - 阶段3整体测试"
"阶段4.8 - 阶段4整体测试"
# 任务进度
@@ -460,6 +460,89 @@ using (Profiler.BeginZone("BurstJob.Schedule"))
- 阻碍因素:无
- 状态:未确认 → 等待用户确认:成功/不成功?
## 阶段4双轨运行和实际调用
### 4.1 GameController添加控制字段
[2025-12-01 18:00:00]
- 已修改GameController.cs (添加1个字段Line 22)
- 更改添加_enableSchedulerUpdate控制字段默认false
- 原因控制GameController使用新旧Update方式
- 阻碍因素:无
- 状态:未确认
### 4.2 修改GameController主Update循环
[2025-12-01 18:02:15]
- 已修改GameController.cs Update方法主循环 (修改8行Line 318-329)
- 更改添加新旧Update方式分支支持调用FlatOptimizationUpdate或ScriptUpdate
- 原因允许运行时切换Update方式进行对比
- 阻碍因素:无
- 状态:未确认
### 4.3 修改GameController滚动时间轴Update调用
[2025-12-01 18:04:30]
- 已修改GameController.cs Update方法滚动逻辑 (修改4行Line 373-376)
- 更改:滚动时间轴也支持新旧方式切换
- 原因确保所有Update调用点一致
- 阻碍因素:无
- 状态:未确认
### 4.4 修改GameController滚动Reset逻辑
[2025-12-01 18:05:45]
- 已修改GameController.cs Update方法滚动Reset (修改10行Line 378-388)
- 更改:滚动重置也支持新旧方式切换
- 原因确保Reset调用点一致
- 阻碍因素:无
- 状态:未确认
### 4.5 修改ForceScriptUpdate方法
[2025-12-01 18:07:00]
- 已修改GameController.cs ForceScriptUpdate方法 (修改5行Line 294-299)
- 更改:强制更新也支持新旧方式切换
- 原因确保所有Update入口一致
- 阻碍因素:无
- 状态:未确认
### 4.6 修改Stop/Pause/Play方法
[2025-12-01 18:08:15]
- 已修改GameController.cs Stop/Pause/Play方法 (修改15行Line 263-292)
- 更改:播放控制方法也支持新旧方式切换
- 原因确保播放控制的Update调用一致
- 阻碍因素:无
- 状态:未确认
### 4.7 RootObject.UpdateTicks调用调度器关键
[2025-12-01 18:10:30]
- 已修改RootObject.cs UpdateTicks方法 (添加10行Line 111-120)
- 更改RootObject调用Scheduler.DoUpdate()进行扁平化Update移除base.UpdateTicks()调用
- 原因这是关键步骤让Scheduler实际被调用建立完整调用链
- 阻碍因素:无
- 状态:未确认
### 4.7.1 修复崩溃问题 - 条件调用Scheduler
[2025-12-01 18:15:00]
- 已修改RootObject.cs UpdateTicks方法 (修改逻辑Line 112-124)
- 更改添加条件判断仅在Scheduler有注册对象时调用Scheduler否则调用base.UpdateTicks()保持旧行为
- 原因:修复旧方式下的崩溃问题,避免双重更新和冲突
- 阻碍因素:无
- 状态:未确认
### 4.8 阶段4整体测试
[2025-12-01 18:12:00]
- 已修改阶段4所有代码完成等待测试
- 更改实现双轨Update支持新旧方式切换GameController 6处修改RootObject 1处关键修改
- 原因验证新方式功能正确且性能提升Scheduler实际被调用
- 测试项目:
1. 编译项目 - ✅ 已通过无linter错误
2. 旧方式测试_enableSchedulerUpdate=false - 待测试
3. 新方式测试_enableSchedulerUpdate=true部分对象启用调度器 - 待测试
4. 功能验证(播放/暂停/停止/滚动时间轴) - 待测试
5. 性能对比Tracy Profiler数据 - 待测试
- 阻碍因素:无
- 状态:未确认 → 等待用户确认:成功/不成功?
- 调用链验证:
* 旧方式GameController → MainObject.ScriptUpdate() → 递归
* 新方式GameController → MainObject.FlatOptimizationUpdate() → RootObject.UpdateTicks() → Scheduler.DoUpdate() → 扁平化
# 最终审查
[待完成]

View File

@@ -17,6 +17,9 @@ namespace Demo.Game
[Resources, SerializeField] public GlobalConfig MainConfig;
[Content] private RootObject MainObject;
[Content, SerializeField]
private bool _enableSchedulerUpdate = false; // 控制是否使用新的UpdateScheduler
public string RootSourcePath { get; private set; }
public Action<float, float> SetupSongDuration { get; private set; } = (_, _) => { };
@@ -264,7 +267,10 @@ namespace Demo.Game
{
SetSongCurrentTime(SongOffset);
}
MainObject.ScriptUpdate(SongOffset, Time.deltaTime, ScriptableObject.TickType.Reset);
if (_enableSchedulerUpdate)
MainObject.FlatOptimizationUpdate(SongOffset, Time.deltaTime, ScriptableObject.TickType.Reset);
else
MainObject.ScriptUpdate(SongOffset, Time.deltaTime, ScriptableObject.TickType.Reset);
}
public void Pause()
@@ -274,7 +280,10 @@ namespace Demo.Game
{
SetSongCurrentTime(CurrentTime);
}
MainObject.ScriptUpdate(CurrentTime, Time.deltaTime, ScriptableObject.TickType.Pause);
if (_enableSchedulerUpdate)
MainObject.FlatOptimizationUpdate(CurrentTime, Time.deltaTime, ScriptableObject.TickType.Pause);
else
MainObject.ScriptUpdate(CurrentTime, Time.deltaTime, ScriptableObject.TickType.Pause);
}
public void Play()
@@ -285,12 +294,18 @@ namespace Demo.Game
SetupSongDuration(SongOffset, MainAudio.CurrentClip.length + SongOffset);
}
SetSongCurrentTime(CurrentTime);
MainObject.ScriptUpdate(CurrentTime, Time.deltaTime, ScriptableObject.TickType.Start);
if (_enableSchedulerUpdate)
MainObject.FlatOptimizationUpdate(CurrentTime, Time.deltaTime, ScriptableObject.TickType.Start);
else
MainObject.ScriptUpdate(CurrentTime, Time.deltaTime, ScriptableObject.TickType.Start);
}
public void ForceScriptUpdate(ScriptableObject.TickType type = ScriptableObject.TickType.Update)
{
MainObject.ScriptUpdate(CurrentTime, Time.deltaTime, type);
if (_enableSchedulerUpdate)
MainObject.FlatOptimizationUpdate(CurrentTime, Time.deltaTime, type);
else
MainObject.ScriptUpdate(CurrentTime, Time.deltaTime, type);
}
private bool IsScrollTimeline = false;
@@ -314,7 +329,16 @@ namespace Demo.Game
using (Profiler.BeginZone("GameController.ScriptUpdate"))
{
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
if (_enableSchedulerUpdate)
{
// 新方式调用FlatOptimizationUpdate会触发Scheduler
MainObject.FlatOptimizationUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
}
else
{
// 旧方式:递归调用
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
}
}
}
if (IsMain == false)
@@ -358,13 +382,24 @@ namespace Demo.Game
{
SetSongCurrentTime(CurrentTime);
}
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
if (_enableSchedulerUpdate)
MainObject.FlatOptimizationUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
else
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
}
else if (IsScrollTimeline == true)
{
IsScrollTimeline = false;
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Reset);
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
if (_enableSchedulerUpdate)
{
MainObject.FlatOptimizationUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Reset);
MainObject.FlatOptimizationUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
}
else
{
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Reset);
MainObject.ScriptUpdate(CurrentTime, deltaTime, ScriptableObject.TickType.Update);
}
}
}
}

View File

@@ -108,7 +108,20 @@ namespace Demo.Game
Foo();
}
base.UpdateTicks(currentTime, deltaTime, tickType);
// 调用调度器进行扁平化Update仅当有对象注册时
if (Scheduler != null && Scheduler.TotalRegistered > 0)
{
using (Profiler.BeginZone("RootObject.SchedulerUpdate"))
{
Scheduler.DoUpdate(currentTime, deltaTime, tickType);
}
}
else
{
// 旧方式调用base.UpdateTicks()(保持向后兼容)
base.UpdateTicks(currentTime, deltaTime, tickType);
}
}
}
}