暂停方法c#(unity)

问题描述 投票:-2回答:2

因此,我有这种换色器方法,可以连续更改精灵的颜色。我的问题是我想在执行OnMouseDown()方法时暂停它。

我已经尝试过if和return语句。我也尝试过使用布尔值,但是它不起作用。

       public class colorchange : MonoBehaviour
       {
        public int color;

private SpriteRenderer _mySpriteRenderer;
private float _timeBetweenChanges = 1f;

void Start()
{
    _mySpriteRenderer = GetComponent<SpriteRenderer>();
    InvokeRepeating("ChangeColor", 0F, _timeBetweenChanges);
}

void Update()
{
    // not executed
}

void ChangeColor()
{
        color = Random.Range(1, 5);
        if (color == 2)
        {
            _mySpriteRenderer.color = Color.blue;
        }
        if (color == 3)
        {
            _mySpriteRenderer.color = Color.red;
        }
        if (color == 4)
        {
            _mySpriteRenderer.color = Color.yellow;
        }




}
private void OnMouseDown()
{
  // the Changecolor method should be paused in this one
}
}
c# unity3d pause
2个回答
0
投票

将方法放入Update()方法中。然后将其封装在if语句中,该语句在OnMouseDown()上变为false。

private bool methodEnabled = true;

void Update()
{
    if (methodEnabled)
    {
        ChangeColor(){...}
    }
}

void OnMouseDown()
{
    methodEnabled = false;
}

0
投票

有几种方法可以解决此问题,其中一些方法需要更改您的代码。

以下是解决问题的两种最简单的方法。

布尔方法

此策略在ecco's comment中部分显示,尽管他们的解决方案涉及Update()方法,但这不是必需的。

void ChangeColor()
{
    if(!paused)
    {
        color = Random.Range(1, 5);
        if (color == 2)
        {
            _mySpriteRenderer.color = Color.blue;
        }
        if (color == 3)
        {
            _mySpriteRenderer.color = Color.red;
        }
        if (color == 4)
        {
            _mySpriteRenderer.color = Color.yellow;
        }
    }
}

void OnMouseDown()
{
    paused = true;
}

void OnMouseUp()
{
    paused = false;
}

这有效地使您的InvokeRepeating继续运行,但是如果将游戏标记为“已暂停”,ChangeColor的逻辑将不会执行。按照最佳实践标准,这是可以接受的解决方案。

修改时间表

InvokeRepeating使用游戏时间,而不是实时。因此,如果使用Time.timeScale更改游戏的时间标度,则可以有效地pause重复调用。但是,这也会暂停游戏中其他任何基于时间的交互(例如物理)。

void OnMouseDown()
{
    Time.timeScale = 0.0f //Stop time.
}

void OnMouseUp()
{
    Time.timeScale = 1.0f //Allow time to continue at a normal pace.
}

修改时间表通常只用于暂停整个游戏,而不仅仅是特定方法,因为它会暂停所有物理过程。我建议使用基于布尔的方法,但这只是可以使其工作的另一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.