我想预制一张图像。图像及其功能将完全相同,但有两种颜色 - 具体来说,我需要将源图像设置为两个图像中的一个,具体取决于附加到预制件的脚本中bool的实际值。当然,不是使用两个图像,我可能会改变原始图像的颜色,或者以其他方式绘制它,但我想这个方法基本相同 - 所有这些都是在Unity内完成而不是在代码中完成。
使用Unity 4.6最终版本。
对于预制件,Btw继承是不可能的吗?
答案 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);
}
}
}
请注意,这会实例化新对象,当您不再需要它们时,您必须将它们清理干净。