HoloLens-Unity:如何更改光标的颜色?

时间:2019-06-06 11:59:21

标签: unity3d augmented-reality hololens mrtk

我试图在游标运行时通过脚本更改颜色,但效果达到75%:

enter image description here

Mesh_top是唯一不改变颜色的部分,我不知道为什么。 所有4个零件都使用相同的材​​料,名为“ cursormaterial”。 我尝试过的:

  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看起来却有所不同: enter image description here
enter image description here

1 个答案:

答案 0 :(得分:3)

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

打开Animation窗口( CTRL + 6

然后在层次结构中选择CursorVisual

如果现在转到名为CursorWaitingAnim的动画,则可以看到存在top_mesh颜色的关键帧。

enter image description here

此单个关键帧导致该图块的颜色无法在运行时更改。原因是动画器运行after OnInputDown,因此它会还原所有关键帧属性的更改。

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

enter image description here

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


或者,您也可以将其替换为一个,而不是固定颜色,而只是禁用SkinnedMeshRenderer,而基本上@JsonDeserialize基本上具有相同的效果,但是不会拧紧颜色:

enter image description here