Time.timescale = 0后的半连续移动

时间:2015-03-12 21:09:09

标签: c# unity3d

我试图在游戏过程中弹出文本框并暂停游戏,这似乎在很大程度上起作用。我发现它有点奇怪,并且无法弄清楚发生了什么:只要我一直按动键(特别是LEFT)我就能保持移动。

我的游戏是基于平铺和转弯的,因此动作只是测试地图数组,然后跳跃角色(如下所示):

if (Input.GetButtonDown ("Horizontal"))
    {
        if (Input.GetAxis ("Horizontal") > 0)
        {
            if (TileArray.WalkableTile (newPosition.x + 1, newPosition.y) == true)
            {
                TileArray.ToggleWalkable (newPosition.x, newPosition.y, true);
                newPosition.x += 1;
                PlayerMoved = true;
            }
        }
        else if (Input.GetAxis ("Horizontal") < 0)
        {
            if (TileArray.WalkableTile (newPosition.x - 1, newPosition.y) == true)
            {
                TileArray.ToggleWalkable (newPosition.x, newPosition.y, true);
                newPosition.x -= 1;
                PlayerMoved = true;
            }
        }
    }

我用来暂停和显示文本框的代码是:

public void StartDialog(int Counter)
{
    Time.timeScale = Time.timeScale = 0;
    InDialog = true;
    DialogCounter = Counter;
    DialogCanvas.enabled = true;
    ClickCounter = 0;
    DialogText.text = DialogArray [DialogCounter][ClickCounter];
    UpdateDialogPic(DialogArray[DialogCounter][ClickCounter]);
}

使用鼠标单击循环显示文本是否仅为1个框或多个文本框链似乎无关紧要。除此之外,一切似乎都工作得很好,无论我是否等待向左或向左按下并不重要 - 只要我一开始就不停止,我可以走地图或直到我击中东西。

1 个答案:

答案 0 :(得分:0)

您需要注意有关Time.timeScale的两个主要事实。

  

当timeScale设置为零时,游戏基本上会暂停,如果你所有的   函数与帧速率无关。

  

如果降低timeScale,建议也降低   Time.fixedDeltaTime相同的金额。

您可以对代码进行以下更改

// introduce a new variable
bool isPaused 

// for the pausing/resuming action
if(isPaused)
{
   Time.timeScale = 1;
   isPaused = !isPaused;
}
else
{
   Time.timeScale = 0;
   isPaused = !isPaused;
}

// On your 'if (Input.GetButtonDown ("Horizontal"))' line
if (Input.GetButtonDown ("Horizontal") && !isPaused)