4

我试图在光标运行时通过脚本更改颜色,它工作到 75%:是唯一不改变颜色的部分,我不知道为什么。所有 4 个零件都使用相同的材​​料,命名为“ ”。我尝试了什么:

在此处输入图像描述

Mesh_topcursormaterial

  1. 通过引用更改颜色cursormaterial
  2. 通过获取组件更改颜色SkinnedMeshRenderer
  3. 尝试使用ProptertyBlock


在所有三种情况下,我得到了相同的结果。唯一有效的是在点击播放之前我可以改变颜色,这将改变整个光标的颜色。在运行时更改它仅适用于 4 个部分中的 3 个......'

- 编辑 -

    public SkinnedMeshRenderer cursorRendererOne, cursorRendererTwo, cursorRendererThree, cursorRendererFour;
private MaterialPropertyBlock _propBlock;
public Material material;

void Start()
{
    _propBlock = new MaterialPropertyBlock();
}

public void OnInputDown(InputEventData eventData)
{
    if (!isActivated)
    {
        //#1
        material.color = Color.blue;
        //#2
        cursorRendererOne.sharedMaterial.color = Color.blue;
        //#3
        cursorRendererOne.GetPropertyBlock(_propBlock);
        _propBlock.SetColor("_Color", Color.blue);
        cursorRendererOne.SetPropertyBlock(_propBlock);
        cursorRendererTwo.SetPropertyBlock(_propBlock);
        cursorRendererThree.SetPropertyBlock(_propBlock);
        cursorRendererFour.SetPropertyBlock(_propBlock);
        isActivated = true;
    }


在这里,您可以看到更改后的材料,但mesh_top外观却有所不同: 在此处输入图像描述
在此处输入图像描述

4

1 回答 1

3

这是一个“错误”(也许是故意的?)。

打开Animation窗口 ( CTRL+ 6)

并在层次结构中选择CursorVisual

如果您现在转到调用的动画,CursorWaitingAnim您可以看到 top_mesh 颜色有一个关键帧。

在此处输入图像描述

此单个关键帧导致该图块的颜色无法在运行时更改。原因是动画师会在之后 OnInputDown运行,因此它会还原任何关键帧属性的更改。

因此,如果您不需要等待动画,只需删除该关键帧。

在此处输入图像描述

=> 您可以再次在运行时操纵颜色!


或者,您可以将其替换为不固定颜色SkinnedMeshRenderer而是简单地禁用基本上具有或多或少相同效果但不拧颜色的替代:

在此处输入图像描述

于 2019-06-06T13:10:42.547 回答