【发布时间】:2016-11-09 08:12:12
【问题描述】:
我有一个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 View 或 Scene View 中的颜色仍然没有变化,但 Inspector 中的颜色确实发生了变化
更新 2
我缩小了范围,但仍未解决。我正在使用 2d 实验版本 5.5.0a6。我安装了当前稳定版5.4.2f2,问题不存在!因此,问题与版本5.5.0a6 中的SpriteRenderer 有关。我正在尝试找出问题所在,希望尽快解决。
更新 3 这是说明问题的 2 个简单项目的链接。一个用于 5.5.0a6 版本,其中包含该问题,而与 5.4.2f2 版本完全相同的项目,该版本不包含该问题。
【问题讨论】:
-
您是否尝试过禁用渲染器并在之后(更改颜色后)立即启用它?
-
@Hellium 刚试了下还是不行。我尝试禁用然后进行更改然后启用并进行更改然后立即禁用并再次启用。
-
您在 sprite 上使用什么材质/着色器?你可以试试 Player1.color = new Color (1f,0f,0f,1f);
-
@Demon
Sprites-Default材料。同样,这在运行时使用检查器的编辑器中工作得非常好,所以我不认为材料会成为问题,我也尝试了统一本身提供的所有其他可用材料,但那些也不起作用。执行new Color(1f, 0f, 0f, 1f)会在检查器中更改它,但不会更改游戏视图,就像我尝试过的其他所有操作一样。 -
附有动画吗?可能会改变动画中的颜色
标签: unity3d unity5 unity3d-2dtools