在编辑模式下更改对象颜色

时间:2019-05-14 22:44:46

标签: c# unity3d

也许它比看起来简单,但是我找不到正确的方法。 在我的编辑器中,我具有通过[ExecuteInEditMode]运行的MonoBehaviour。在此脚本中,我具有以下代码:

void OnGUI() {
    Event e = Event.current;
    Vector3 mousePosition = e.mousePosition;
    mousePosition.y = Screen.height - mousePosition.y;
    Ray ray = cam.ScreenPointToRay(mousePosition);
    RaycastHit hitInfo;
    if (Physics.Raycast(ray, out hitInfo, 100f)) {
        if (hitInfo.transform.gameObject.name.Contains("MySphere")) {
           go_highlight = GameObject.Find(hitInfo.transform.gameObject.name);
           go_highlight.GetComponent<MeshRenderer>().sharedMaterial.color = Color.yellow;
        } 
    [...]

在代码的另一部分中,如果光标不在球体上方,我将还原球体的颜色。 在场景中,我有几个球体,需要在鼠标指针下方突出显示一个球体。 我得到的是所有球体都被突出显示,而不仅仅是光标下方的那个。我猜这是针对“ sharedMaterial”的,但是我不能使用“ Material”,因为它返回错误。 我还可以使用OnMouseEnter和OnMouseExit将脚本附加到球体上,但我必须在“编辑模式”下工作,而且即使在[ExecuteInEditMode]下,这些方法也似乎不起作用。

您有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我建议不要改变颜色;您可以更改该对象的材质。

例如:

  1. obj有材料(1)
  2. 材料(1)为红色
  3. 当鼠标悬停在obj上时,材料变为(2)
  4. 材料(2)为蓝色

允许此更改

go_highlight.GetComponent<MeshRenderer>().sharedMaterial.color = Color.yellow;

收件人

go_highlight.GetComponent<MeshRenderer>().material = material (2);

这是一个简化的解决方案,可以匹配您的代码,但是有更有效的方法来实现此目的。