0

我想要一个图像的预制件。图像及其功能将完全相同,但有两种颜色 - 具体来说,我需要根据附加到预制件的脚本中布尔值的实际值将源图像设置为两个图像之一。当然,我可以不使用两个图像,而是更改原始图像的颜色,或者以其他方式绘制它,但我想方法大致相同 - 全部在 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 回答