我试图在游标运行时通过脚本更改颜色,但效果达到75%:
Mesh_top
是唯一不改变颜色的部分,我不知道为什么。
所有4个零件都使用相同的材料,名为“ 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;
}
答案 0 :(得分:3)
这是一个“错误”(也许是故意的?)。
打开Animation
窗口( CTRL + 6 )
然后在层次结构中选择CursorVisual
如果现在转到名为CursorWaitingAnim
的动画,则可以看到存在top_mesh颜色的关键帧。
此单个关键帧导致该图块的颜色无法在运行时更改。原因是动画器运行after OnInputDown
,因此它会还原所有关键帧属性的更改。
因此,如果不需要等待动画,只需删除该关键帧即可。
=>您可以在运行时再次操作颜色!
或者,您也可以将其替换为一个,而不是固定颜色,而只是禁用SkinnedMeshRenderer
,而基本上@JsonDeserialize
基本上具有相同的效果,但是不会拧紧颜色: