【发布时间】:2018-07-09 01:09:33
【问题描述】:
制作一个调试器,在播放场景时按下按钮即可启动。一旦调试为真,游戏需要在代码中调用一个名为 DebugStep 的函数处完全暂停,然后从该点继续向前。这是我的脚本附加到画布按钮
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ToggleDebugButton : MonoBehaviour {
//private TimeDebugger timeDebugger;
[Header("Debugger")]
public bool isDebugging;
public string debugStep;
[Header("Basic Properties")]
public bool isMoving;
public bool isAttacking;
public bool isSwinging;
private BasicProperties basicProperties;
void Start()
{
basicProperties = GameObject.Find("MrPresident").GetComponent<BasicProperties>();
isDebugging = false;
GetComponent<Button>().onClick.AddListener(TogglePause);
}
public void TogglePause()
{
isDebugging = !isDebugging;
if ( !isDebugging )
{
Time.timeScale = 1f;
}
}
public void FixedUpdate()
{
DebugStep("DebugUpdateEnd");
}
public void DebugStep(string source)
{
if (isDebugging)
{
isMoving = basicProperties.isMoving;
isAttacking = basicProperties.isAttacking;
isSwinging = basicProperties.isSwinging;
debugStep = source;
print("start set timescale 0");
Time.timeScale = 0f;
print("end set timescale 0");
}
}
}
问题是当在 FixedUpdate 中调用 DebugStep 时,第一个打印语句和第二个打印语句会执行,即使它们之间的时间刻度已设置为 0。当我尝试从其他脚本中的 FixedUpdate 内部调用 DebugStep 时,这是一个更大的问题,我希望在 DebugStep 调用之后暂停整个 FixedUpdate 脚本,然后在我取消暂停时从该点继续。
我认为这不会发生,因为当我在其他地方的 FixedUpdate 中放置了 2 个 DebugStep 调用时,当 timeScale 应该设置为 0 并在第一次打电话。我认为所有脚本中属于当前 FixedUpdate 周期的所有 FixedUpdates 都会完成,即使 timeScale 在其中设置为 0 也是如此。我对么?实际上我真的不确定,因为如果我在 FixedUpdate 中有 2 次以上对 DebugStep 的调用,那么游戏每个周期只会停止一次
有没有办法改变这一点,让游戏在 Timescale = 0 时完全停止,然后在我将 Timescale 设置回 1 时从那个确切的点恢复?谢谢
【问题讨论】:
标签: unity3d