Jump to content
Unity Insider Forum

Ändern einer Materialfarbe bei OnMouseOver macht komisches....


Elharter

Recommended Posts

Hey Kollegen,

nun mein Code:

void OnMouseOver()
    {
        Debug.Log("Mouse is over:" + gameObject.name);
        Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>();
        int i = 0;
        foreach (Renderer r in rs)
        {
            Material m = r.material;
            Debug.Log("Materialname is:" + m.name);
            oldMaterial = r.material;
            oldColor = r.material.color;
            newMaterial = new Material(oldMaterial);
            newColor = new Color(oldColor.r, oldColor.g, oldColor.b, 0.10f);
            //newMaterial.SetColor("Color", newColor);
            //newMaterial.SetColor("_Color", newColor);
            newMaterial.SetColor("_BaseColor", newColor);
            newMaterial.color = newColor;
            newMaterial.EnableKeyword("_Surface");
            newMaterial.SetFloat("_Surface", (float)SurfaceType.Transparent);
            newMaterial.name = "Modified Material";
            r.material = newMaterial;
            i++;
        }
    }
    void OnMouseExit()
    {
        Debug.Log("Mouse is exited from:" + gameObject.name);
        Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>();
        int i = 0;
        foreach (Renderer r in rs)
        {
            r.material = oldMaterial;
            i++;
        }

    }

image.png.0018bfc528643bb1d0a3f94e2f06bc8f.png

Ganz seltsames Verhalten. Grundsätzlich: es passiert nix. Weder die Farbe, noch das Surfacetype ändert sich.

Clicke ich jedoch im Inspector und klappe den Shader AUF, nimmt er den neuen Wert einmal an.
(Ich benutze URP)

Was ist hier los? Jemand eine Idee?

 

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab den Code jetzt nochmal verändert zu diesem:

 

    void OnMouseOver()
    {
        Debug.Log("Mouse is over:" + gameObject.name);
        Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>();
        int i = 0;
        foreach (Renderer r in rs)
        {
            Material m = r.material;
            Debug.Log("Materialname is:" + m.name);
            newColor = new Color(m.color.r, m.color.g, m.color.b, 0.25f);
            //newMaterial.SetColor("Color", newColor);
            //newMaterial.SetColor("_Color", newColor);
            m.EnableKeyword("_BaseColor");
            m.SetColor("_BaseColor", newColor);
            m.color = newColor;
            m.EnableKeyword("_Surface");
            m.SetFloat("_Surface", (float)SurfaceType.Transparent);
            i++;
        }
    }
    void OnMouseExit()
    {
        Debug.Log("Mouse is exited from:" + gameObject.name);
        Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>();
        int i = 0;
        foreach (Renderer r in rs)
        {
            Material m = r.material;
            newColor = new Color(m.color.r, m.color.g, m.color.b, 1f);
            m.EnableKeyword("_BaseColor");
            m.SetColor("_BaseColor", newColor);
            m.color = newColor;
            m.EnableKeyword("_Surface");
            m.SetFloat("_Surface", (float)SurfaceType.Opaque);
            i++;
        }

    }

selbes Verhalten..... GANZ komisch...

Siehe Video hier:

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...