Unity更改按钮的子组件的图像

时间:2018-12-02 17:38:20

标签: c# unity3d

public class BitmapWebView extends WebView{

    private void init(){
        stream = new ByteArrayOutputStream();
        array = new ReadData(new byte[]{});
        bm = Bitmap.createBitmap(outputWindowWidth,
             outputWindowHeight, Bitmap.Config.ARGB_8888);
        bmCanvas = new Canvas(bm);
   }


    @Override
    public void draw( Canvas ){
        // draw onto a new canvas  
        super.draw(bmCanvas);
        bm.compress(Bitmap.CompressFormat.PNG, 100, stream);

        array.Buffer = stream.toByteArray();
        UnityBitmapCallback.onFrameUpdate(array,
            bm.getWidth(),
            bm.getHeight(),
            canGoBack,
            canGoForward );
        stream.reset();

    }
}  
// you need this class to communicate properly with unity
public class ReadData {
    public byte[] Buffer;
    public ReadData(byte[] buffer) {
        Buffer=buffer;
    }
}

我有一个按钮预制件,也就是一个按钮,其图像组件为子组件。我不确定为什么我的代码会更改按钮精灵图像,以反对孩子的按钮。更改孩子很重要,我更改的图像也是一个圆圈,所以我不想丢失按钮已经是的矩形默认图像。如何更改子图像,同时将按钮图像保留为默认值?

1 个答案:

答案 0 :(得分:2)

GetComponentInChildren<t>()使用深度优先搜索在游戏对象或其子对象中获取请求的组件,这意味着它将首先检查父对象,并返回找到的第一个实例。您可以使用GetComponentsInChildren<t>(),这将返回在父级及其子级中找到的所有组件的数组。

一种替代方法是获取第一个子元素,然后对该子元素调用GetComponent<t>()

要跳过父级,请使用GetComponentsInChildren<t>()遍历所有找到的组件,如果它们不是父级上的t,则更改其纹理。

这里是一个例子,它并不是最有效的方法:

void Start () {

    foreach (Sprite texture in spriteImages) {
        GameObject button = Instantiate (shopButtonPrefab) as GameObject;
        Image buttonImage= button.GetComponent<Image>();
        Image[] images = button.GetComponentsInChildren<Image>().sprite = texture;
        foreach(Image image in images) {
            if(image != buttonImage) 
            {
                image.sprite = texture;
                break;
            }
        }
        button.transform.SetParent (shopButtonContrainer.transform, false);
    }
}