任务失败, 该分支已经废弃
This commit is contained in:
@@ -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() → 扁平化
|
||||
|
||||
# 最终审查
|
||||
[待完成]
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user