2017-11-08 7 views
1

私はあなたのトロフィーをクリックしてその上の木の色を変更する必要があるこのミニタスクを自分のゲームに持っています。色が間に等しいというユニティが素材の色を少し戻しています

enter image description here

私はダブルチェックしました:私は色の二つの配列を持って、一つは、すべての可能な色や他のものを含む配列は、以下のように4色(答え)が含まれています2つのアレイ。例えば、Colors-arrayの紫色は、Right Order-arrayの紫色の値と全く同じr、g、&の値を持つ、を有する。

トロフィーに正しい色が付いているかどうかを確認するには、それらをループして物質の色をつかんでください。それから私はRight Order-arrayに対してその色をチェックしますが、それはうまく動作しません。たとえば、私の最初のトロフィーは、それが正しいはず紫ですが、いくつかの理由のためにUnityが除外さよりもわずかに異なる材料の色を返しているので、それがないとき:

enter image description here

なぜこれが起こっている誰かが知っている願っています。

+0

材料は同じものでも異なっていますか?私は紫色のために、色配列と右の順序配列で言うことを意味します。彼らはその資料を共有していますか? – Thalthanas

+0

どちらの配列も、素材、色は「public Color [] colors」 – Jonathan

+0

ではありませんので、トロフィーの素材色とカラー配列を比較してください。最初のログはトロフィーの材料色に属し、2番目のログは配列からです。 – Thalthanas

答えて

1

あなたが言っているのは、まったく同じ色です。正確な値ではない、カラーインスペクタのrgbの値を参照しているとします。

色の値が異なる可能性があるのは分かりませんが、 最も近い整数に丸めた後に値を比較する拡張メソッドを記述できます。

public static class Extensions 
{ 
    public static bool CompareRGB(this Color thisColor, Color otherColor) 
    { 
     return 
      Mathf.RoundToInt(thisColor.r * 255) == Mathf.RoundToInt(otherColor.r * 255) && 
      Mathf.RoundToInt(thisColor.b * 255) == Mathf.RoundToInt(otherColor.b * 255) && 
      Mathf.RoundToInt(thisColor.g * 255) == Mathf.RoundToInt(otherColor.g * 255); 
    } 
} 

用法:

Color red = Color.Red; 
red.CompareRGB(Color.Red); // true; 
red.CompareRGB(Color.Green); // false; 

この情報がお役に立てば幸いです。

0

私はパレットを使用します。これは単純に使用可能なすべての色の配列です(これはあなたのように聞こえる)。それぞれの "トロフィー"について、この配列にINDEXを記録すると同時に、レンダラーに色を割り当てます。また、レンダラーに色を割り当てると同時に、 "ボタン"ごとにインデックスを記録します。

次に、パレットのインデックス値(単純な整数)を比較して、色が一致するかどうかを確認するだけです。

関連する問題