2014-11-27 7 views
0

Я хотел бы иметь один сборник изображения. Изображение и его функции будут абсолютно одинаковыми, но приходят в двух цветах - в частности, мне нужно будет установить исходное изображение на одно из двух изображений в зависимости от фактического значения bool в скрипте, прикрепленном к сборнику. Конечно, вместо того, чтобы использовать два изображения, я, вероятно, мог бы изменить цвет исходного изображения или сделать его каким-то другим способом, но я думаю, что метод будет в основном тем же самым - все сделано внутри Unity, а не в коде.Имейте разное исходное изображение в Unity 4.6 UI Image prefab в зависимости от состояния свойства bool

Использование окончательного выпуска Unity 4.6.

Btw наследование невозможно с сборными буквами справа?

ответ

0

Я предполагаю, что вы ссылаетесь на компонент изображения в новом интерфейсе и хотите изменить спрайт.

Либо присвоит 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); 
     } 
    } 
} 

Берегись, что это инициализирует новые объекты, и вы должны очистить их, когда вы не нуждаетесь в них больше.