【问题标题】:Have different Source Image in Unity 4.6 UI Image prefab depending on script bool property state根据脚本布尔属性状态,在 Unity 4.6 UI Image prefab 中有不同的源图像
【发布时间】:2014-11-27 17:25:16
【问题描述】:

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

使用 Unity 4.6 最终版本。

顺便说一句,预制件不能继承,对吗?

【问题讨论】:

    标签: unity3d generalization


    【解决方案1】:

    我假设您在新 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);
            }
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多