为什么SpriteRenderer颜色在运行时没有更新?

时间:2016-11-09 08:12:13

标签: unity3d unity5 unity3d-2dtools

我有GameObject SpriteRenderer,其默认颜色设置为白色。在运行时,我将颜色设置为Color.gray,并且由于某种原因,它不会在运行时更新为新的gray色调。我已经确认我的脚本中的对象是正确的,因为如果我将enabled设置为false并且如果我在编辑器中选择了对象并且播放时,精灵完全消失,则Inspector中的颜色会发生变化但是不会在Game View中更新。

这是我的简单剧本

public class GameManager : MonoBehaviour
{
    public SpriteRenderer Player1;
    public SpriteRenderer Player2;

    public void SetTurn(bool isPlayer1)
    {
        this.Player1.color = Color.gray;
        this.Player2.color = Color.gray;

        if (isPlayer1)
            this.Player1.color = Color.white;
        else
            this.Player2.color = Color.white;
    }
}

SetTurn是通过鼠标点击其Update中的其他脚本调用的;我已经验证该功能实际上正在运行。我也尝试将其简化为:

public class GameManager : MonoBehaviour
{
    public SpriteRenderer Player1;
    public SpriteRenderer Player2;

    private void Update()
    {
        this.Player1.color = Color.red;
    }
}

这甚至不起作用。控制台中没有警告也没有错误。我尝试重新启动,重建,退出并重新启动,在不同的计算机上运行并在完全不同的平台上运行......没有任何作用。

知道我做错了什么吗?同样,颜色在运行时在Inspector中更改,但在Game View中没有。此外,如果我在运行时Inspector手动更改颜色,Game View确实会改变颜色,它只是拒绝从脚本中执行此操作。

修改

我也尝试使用Color32来覆盖我的基础,这不起作用,正如我预期的那样。

更新

我完全删除了脚本并创建了一个新脚本,我直接将其附加到GameObject本身,这甚至都不起作用。

public class test : MonoBehaviour
{
    private SpriteRenderer m_Renderer;

    void Start()
    {
        this.m_Renderer = this.GetComponent<SpriteRenderer>();
    }

    void Update()
    {
        this.m_Renderer.color = Color.black;
        Debug.Log("COLOR BLACK");
    }
}

控制台显示“COLOR BLACK”,因此我知道正在调用更新,但Game ViewScene View仍然没有颜色变化,但Inspector

确实发生了变化

更新2

我缩小了范围,但仍然没有解决它。我正在使用2d实验版5.5.0a6。我安装了当前的稳定版本5.4.2f2,问题不存在!因此,问题与版本SpriteRenderer中的5.5.0a6有关。我试图找出问题所在,我希望很快就能解决。

更新3 以下是2个简单项目的链接,用于说明问题。一个用于版本5.5.0a6,其中包含该问题,而版本5.4.2f2的完全相同的项目不包含该问题。

Sample Projects

1 个答案:

答案 0 :(得分:1)

仅更新可能需要此问题答案的人。 在Unity版本2019.1.12f1中。在编辑器中选择颜色后,我们必须再设置1个Alpha值

Click to see how to set Alpha value after select color 然后我们可以像下面这样正常使用代码:

public Color pink;
public Color purple;
void SetRandomColor() {
        int ran = Random.Range(0, 1);
        Debug.Log("RANDOM: " + ran);
        switch (ran) {
            case 0:
                sr.color = pink;
                break;
            case 1:
                sr.color = purple;
                break;
        }
    }