2016-09-06 1 views
0

私はUnity 5を使用していて、2つのゲームオブジェクトマテリアルが同じマッチングカラーを持っているかどうかをチェックし、カラーが一致しない場合はアクションを実行します。私は、以下のC#のコードを使用しています:Unityカラーマッチをチェックする方法

void OnCollisionEnter2D(Collision2D col) 
{ 

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

これは時々ゲームオブジェクトは色が一致した場合でも破壊されますと正常に動作して表示されません。色の一致を確認する別の方法があるのか​​どうか疑問に思うだけですか? colorため

書き込み拡張メソッドをし、このようにそれを使用する:これが機能しない場合

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); 
    } 
} 

+0

あなたが個別に各コンポーネント(RGBAまたはXYZW)を比較してみましたか?それは痛みですが動作します。 – Cabrra

+0

2つの色を比較していないため、2つの 'Color'オブジェクトが等価である(同じ値を保持していてもそうでない可能性が高い)ため、失敗する理由があります。色を比較したい場合は、同じ値( 'Vector4'に変換して比較することもできます)がある場合は、個々のコンポーネント(r、g、b、おそらくはアルファ)を​​比較する必要があります – UnholySheep

答えて

1

は、新たな一時変数にcolorオブジェクトを保存してから比較を行うようにしてください。

エクステンションクラス:

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; 
    } 
} 

用途:

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

拡張メソッドが機能し、ありがとう。 – Kaz

関連する問題