HoloLens - Unity:如何改变光标的颜色?
HoloLens - Unity: How to change color of cursor?
我尝试在光标运行时通过脚本更改颜色,结果达到了 75%:
Mesh_top
是唯一不改变颜色的部分,我不知道为什么。
所有 4 个部分都使用相同的 material,命名为“cursormaterial
”。
我尝试了什么:
- 参考
cursormaterial
改变颜色
- 通过获取组件改变颜色
SkinnedMeshRenderer
- 正在尝试使用
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;
}
在这里你看到改变的 material,但是 mesh_top
看起来不同:
这是 "Bug"(也许是有意为之?)。
打开Animation
window (CTRL + 6)
并且在层次结构中 select CursorVisual
如果您现在转到名为 CursorWaitingAnim
的动画,您会看到 top_mesh 颜色有一个关键帧。
此单个关键帧导致无法在运行时更改该图块的颜色。原因是动画师运行 after OnInputDown
因此它会还原任何关键帧 属性.
的更改
因此,如果您不需要 Waiting 动画,只需删除该关键帧即可。
=> 您可以再次在运行时操作颜色!
或者你可以用一个代替固定颜色的代替它只是禁用 SkinnedMeshRenderer
而不是基本上具有或多或少相同的效果但不会搞砸颜色:
我尝试在光标运行时通过脚本更改颜色,结果达到了 75%:
Mesh_top
是唯一不改变颜色的部分,我不知道为什么。
所有 4 个部分都使用相同的 material,命名为“cursormaterial
”。
我尝试了什么:
- 参考
cursormaterial
改变颜色 - 通过获取组件改变颜色
SkinnedMeshRenderer
- 正在尝试使用
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;
}
在这里你看到改变的 material,但是 mesh_top
看起来不同:
这是 "Bug"(也许是有意为之?)。
打开Animation
window (CTRL + 6)
并且在层次结构中 select CursorVisual
如果您现在转到名为 CursorWaitingAnim
的动画,您会看到 top_mesh 颜色有一个关键帧。
此单个关键帧导致无法在运行时更改该图块的颜色。原因是动画师运行 after OnInputDown
因此它会还原任何关键帧 属性.
因此,如果您不需要 Waiting 动画,只需删除该关键帧即可。
=> 您可以再次在运行时操作颜色!
或者你可以用一个代替固定颜色的代替它只是禁用 SkinnedMeshRenderer
而不是基本上具有或多或少相同的效果但不会搞砸颜色: