[RS] 制作问题记录

1、时间冻结遇上卡顿,战斗表现与逻辑脱节

1.1 做法设定
  • 时间冻结:Time.timeScale = 0
  • 冻结与恢复的控制:用UnScaledFrameTimer执行
  • 战斗逻辑:用ScaledFrameTimer驱动
  • 冻结效果:当前施法的单位正常行动,其他单位冻结
  • 逻辑与表现匹配方式:完整的逻辑帧中减去冻结的帧数,当前表现的TML忽略TimeScale正常播放
  • TML基于时间播放:其本身有追帧效果
1.2 脱节问题点与现象
  • 时间冻结恢复的那帧,卡住了(比如2s)。卡多久会脱节多久,最大上限为冻结的时长。
  • Unity冻结恢复的那一帧,deltaTime还是0
  • TML在冻结恢复时,时间取值从unscaledDeltaTime变成了deltaTime:本应一直Play的TML暂停了很长的一帧
1.3 原因

  正常的执行效果是,TML完整播放,逻辑在冻结时暂停,恢复的时候TML跟逻辑点正好匹配。
  由于卡顿 + 切换帧,导致TML中间暂停了很长时间(超过/接近冻结时间);逻辑帧正常结束暂停(实际上是有偏差)。

实际走出的效果描述1:逻辑没有暂停(但减了帧数);表现正常播放 => 逻辑比表现短了

实际走出的效果描述2:逻辑正常暂停、结束;表现由于切换的暂停,总时长被拉长了 => 表现比逻辑长了

1.4 解决方案

  最终放弃了TimeScale做法
表现层:

  • TML自己处理暂停,包括Animator、Animation、Particle System等组件的处理
  • 浮空脚本支持暂停

逻辑层:

  • 保持主逻辑正常执行
  • 其他单位的逻辑,根据时间暂停、延后执行

你可能感兴趣的:([RS] 制作问题记录)