2016-09-06 3 views
0

Ich verwende Unity 5 und wollte auf Kollision überprüfen, wenn zwei Spielobjektmaterial die gleiche übereinstimmende Farbe haben und Maßnahmen ergreifen, wenn die Farben nicht übereinstimmen. Ich bin mit dem C# -Code unter:Unity, wie nach Farbübereinstimmung zu überprüfen

void OnCollisionEnter2D(Collision2D col) 
{ 

    if(col.gameObject.GetComponent<Renderer>().material.color != this.gameObject.GetComponent<Renderer>().material.color) 
    { 
     Destroy(col.gameObject); 
    } 
} 

Dies scheint nicht richtig, wie die manchmal die Gameobject sogar Streichhölzer zerstört werden, wenn die Farbe zu arbeiten. Ich frage mich nur, ob es eine andere Möglichkeit gibt, nach Farbübereinstimmungen zu suchen?

void OnCollisionEnter2D(Collision2D col) 
{ 
    Color myColor = GetComponent<Renderer>().material.color; 
    Color otherColor = col.gameObject.GetComponent<Renderer>().material.color; 
    if(myColor.Equals(otherColor)) 
    { 
     Destroy(col.gameObject); 
    } 
} 

Wenn dies nicht funktioniert:

schreiben Erweiterungsmethode für color und es verwenden, wie dies

+0

Haben Sie versucht, jede Komponente (rgba oder xyzw) Vergleichen getrennt? Es ist ein Schmerz, aber funktioniert. – Cabrra

+0

Der Grund dafür ist, dass Sie nicht zwei Farben vergleichen, sondern zwei "Color" -Objekte für die Gleichheit (was höchstwahrscheinlich nicht der Fall ist, auch wenn sie dieselben Werte enthalten). Wenn Sie die Farben vergleichen möchten, müssten Sie jede einzelne Komponente (r, g, b und vielleicht sogar Alpha) vergleichen, wenn sie dieselben Werte haben (die Konvertierung zu 'Vector4' und der Vergleich könnte auch funktionieren). – UnholySheep

Antwort

1

Try color Objekte in neuen temporären Variablen und führen Sie dann den Vergleich zu sparen:

Erweiterungsklasse:

static class Extension 
{ 
    public static bool IsEqualTo(this Color me, Color other) 
    { 
     return me.r == other.r && me.g == other.g && me.b == other.b && me.a == other.a; 
    } 
} 

Verbrauch:

void OnCollisionEnter2D(Collision2D col) 
{ 
    Color myColor = GetComponent<Renderer>().material.color; 
    Color otherColor = col.gameObject.GetComponent<Renderer>().material.color; 
    if(myColor.IsEqualTo(otherColor)) 
    { 
     Destroy(col.gameObject); 
    } 
} 
+0

Die Erweiterungsmethode funktioniert, Vielen Dank. – Kaz

Verwandte Themen