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