在Unity 4.6 UI Image预制中具有不同的源映像,具体取决于脚本bool属性状态

时间:2014-11-27 07:13:51

标签: unity3d generalization

我想预制一张图像。图像及其功能将完全相同,但有两种颜色 - 具体来说,我需要将源图像设置为两个图像中的一个,具体取决于附加到预制件的脚本中bool的实际值。当然,不是使用两个图像,我可能会改变原始图像的颜色,或者以其他方式绘制它,但我想这个方法基本相同 - 所有这些都是在Unity内完成而不是在代码中完成。

使用Unity 4.6最终版本。

对于预制件,Btw继承是不可能的吗?

1 个答案:

答案 0 :(得分: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);
        }
    }
}

请注意,这会实例化新对象,当您不再需要它们时,您必须将它们清理干净。