0

画像のプレハブが 1 つ欲しいです。画像とその機能はまったく同じですが、2 つの色があります。具体的には、プレハブに添付されたスクリプトの bool の実際の値に応じて、ソース画像を 2 つの画像のいずれかに設定する必要があります。もちろん、2 つの画像を使用する代わりに、元の画像の色を変更したり、別の方法で描画したりすることもできますが、その方法はほとんど同じであると思います。すべてコードではなく Unity 内で行われます。

Unity 4.6 最終リリースを使用。

プレハブでは継承はできませんよね?

4

1 に答える 1

0

新しい UI で Image コンポーネントを参照していて、スプライトを変更したいと考えています。

プレハブで 2 つのスプライトを割り当てます。

public Sprite spriteOn;
public Sprite spriteOff;
public bool onOff;

void Start() {
    Image imageComponent gameObject.GetComponent<Image>();
    if(imageComponent != null) onOff ? imageComponent.sprite = spriteOn : imageComponent.spriteOff;
}

または、元のスプライトを変更します。

public bool onOff;

void Start() {
    Image imageComponent gameObject.GetComponent<Image>();
    if(imageComponent != null) {
        if(onOff) {
            Sprite baseSprite;
            Texture2D tex = baseSprite.texture;
            Texture2D newTex = (Texture2D)Texture2D.Instantiate(tex);

            Color[] originalPixels = tex.GetPixels(0);
            Color[] newPixels = newTex.GetPixels(0);
            for (int i = 0; i < originalPixels.Length; i++) {
                // As an example we invert the colors
                newPixels[i].r = 1f - originalPixels[i].r; 
                newPixels[i].g = 1f - originalPixels[i].g; 
                newPixels[i].b = 1f - originalPixels[i].b; 
            }
            newTex.SetPixels(newPixels, 0);
            newTex.Apply();
            imageComponent.sprite = Sprite.Create(newTex, baseSprite.rect, baseSprite.bounds.center, baseSprite.pixelsPerUnit);
        }
    }
}

これにより新しいオブジェクトがインスタンス化され、不要になったときにクリーンアップする必要があることに注意してください。

于 2014-11-27T09:25:16.680 に答える