当暂停游戏时(使用bool和time.timescale),它不会暂停分数计数器

时间:2014-08-11 18:37:35

标签: unity3d unityscript

这将是我的第一个问题,所以请继续关注我;)

我使用谷歌的有限知识,教程和故障排除在Unity构建我的第一个游戏,但我似乎无法解决这个问题

我有一个计算得分(使用GUIText)的脚本和另一个用于暂停游戏的脚本(使用时间刻度),你可能已经猜到了但是当我暂停游戏时它并没有暂停得分。

 Script for Pausing:



     var isPaused : boolean = false;



        function Update()
        {
            if(Input.GetKeyDown("p"))
            {
                Pause();
            }
        }

        function Pause()
        {
            if (isPaused == true)
            {
                Time.timeScale = 1;
                isPaused = false;
            }
            else
            {
                Time.timeScale = 0;
                isPaused = true;
            }
            }


Script for Score:


var Counter : int = 100000;   
var Substractor : int = 0;  
var Score : int = Counter - Substractor;   
function Update (
) {
    Score--;
    guiText.text = "Score: "+Score;
}

分数脚本附加到带有gui文本的游戏对象上,暂停游戏的脚本附加到播放器

另一个问题是,当我移动(使用箭头键)然后按暂停然后取消暂停播放器移动得更快且不可预测一秒钟但这只是当我按下箭头按钮时按下暂停时只按暂停没有问题,这是我试图修复自己的一个小问题,只是想我会在这里添加它以便那些能够轻松回答这个问题的人

1 个答案:

答案 0 :(得分:0)

我只知道其他游戏框架中的这个问题,而且我没有团结的经验。但它应该像在其他框架中一样以统一的方式工作。您有两种选择:


每个渲染帧后调用更新!因此,timescale不会影响更新的调用频率。相反,你必须找到一些dtdeltaT(不知道它是如何被统一调用以及如何获得它,但我的意思是时间,因为unities是最后一次更新的调用,请在评论中告诉我,所以我可以编辑这个答案。)

然后不要像以下那样计算你的分数:

Score--;

但使用类似的东西:

Score -= 1 * dt

Score -= 1 * dt * Time.timeScale

(取决于团结的确切程度)


或者你可以用一些if语句来解决你的更新块:

得分:

function Update (
) {
   if (! isPaused()) { // not sure how this function / property is called in unity
      Score--;
      guiText.text = "Score: "+Score;
  }
}