unity c#sprite不断变化的颜色

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

因此,我尝试创建此脚本,该脚本在执行OnMouseDown()方法时会更改精灵的颜色。颜色更改应每2秒执行一次。在下面提供的此代码中,由于某种原因,颜色仅更改一次。

我已经尝试过协程。但是由于某些原因,它们没有起作用。

请帮助谢谢,

public bool startstop = false;
SpriteRenderer m_SpriteRenderer;

IEnumerator Changecolor() {
    yield return new WaitForSeconds(3);
    int random = Random.Range(1, 4);
    if (random == 1) {
        this.m_SpriteRenderer = this.GetComponent<SpriteRenderer>();
        this.m_SpriteRenderer.color = Color.blue;
    } else if (random == 2) {
        this.m_SpriteRenderer = this.GetComponent<SpriteRenderer>();
        this.m_SpriteRenderer.color = Color.red;
    } else if (random == 3) {
        this.m_SpriteRenderer = this.GetComponent<SpriteRenderer>();
        this.m_SpriteRenderer.color = Color.green;
    } else {
        this.m_SpriteRenderer = this.GetComponent<SpriteRenderer>();
        this.m_SpriteRenderer.color = Color.yellow;
    }

    this.StartCoroutine("Changecolor", 3f);
}

private void OnMouseDown() {
    if (this.startstop) {
        this.StartCoroutine("Changecolor", 3f);
        this.startstop = !this.startstop;
    } else {
        this.StopCoroutine("Changecolor");
        this.startstop = !this.startstop;
    }
}

}

没有错误就是行不通。

c# unity3d
2个回答
0
投票

您的代码是正确的,除了没有调用OnMouseDown()函数外,没有任何问题,因为您没有单击任何框式触发器或任何UI元素。因此,尝试使用如下所示的更新功能:


0
投票

您在对象上有Collider吗?要触发Collider事件,需要使用OnMouseDown

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