首页 > 解决方案 > 停止执行方法

问题描述

所以我有这种换色方法可以不断改变我的精灵的颜色。我的问题是我想在执行 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

解决方案


CancelInvoke评论中提到的另一种替代方法是使用布尔值。

public class colorchange : MonoBehaviour {

private bool canChangeColor;

//...

private void ChangeColor() {
   if (!canChangeColor) {
       // You can even do something here if you like.
       return;
   }
   // ...
}

private void OnMouseDown(){
   canChangeColor = false;
}
}

虽然我强烈建议使用CancelInvoke它,除非你需要它来做一些事情,如果它不能改变颜色。


推荐阅读