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