预制层次结构:
按钮
1文字
2图片
我希望访问预制件的Image子组件。
我尝试了以下代码:
GameObject addTypeButton = (GameObject)Instantiate(prefabButton);
addTypeButton.transform.SetParent(ParentPanel, false);
//set text
addTypeButton.GetComponentInChildren<Text>().text ="Some string";
//get image
WWW www = new WWW("someImagelink");
yield return www;
//set image
addTypeButton.GetComponentInChildren<Image>().sprite = Sprite.Create(www.texture, new Rect(0, 0, www.texture.width,www.texture.height), new Vector2(0, 0));
但是,上面的代码正在访问Button的图像脚本(内置)。 不是Image UI组件。 如何访问UI Image(子)组件?
请帮忙。
谢谢!
答案 0 :(得分:4)
Transform.GetChild(index)
也将返回gameObject本身的组件。
public Component GetComponentInChildren(Type t);
使用深度优先搜索返回GameObject 中的Type type 或其任何子项的组件。
如果儿童GameObject 1 Text
和2 Image
的索引是固定的。您可以通过Transform.Find(childName)
获取它们。
var buttonTransform = addTypeButton.transform;
var text = buttonTransform.GetChild(0);
var image = buttonTransform.GetChild(1);
如果订单未解决,请使用0.11。
var buttonTransform = addTypeButton.transform;
var text = buttonTransform.Find("1 Text");
var image = buttonTransform.Find("2 Image");
最安全的解决方案:
将预制件拖到场景中并将脚本附加到按钮GameObject
:
using UnityEngine;
using UnityEngine.UI;
public class MyButton : MonoBehaviour
{
public Text text;
public Image image;
}
然后将1 Text
和2 Image
拖到Button的检查器中的text
和image
字段。
请记住按应用按钮和 Ctrl + S 将其保存到预制件中。
通过这种方式,您可以访问文本和图像,如:
var mybutton = addTypeButton.GetComponent<MyButton>();
mybutton.text.text = "Some string";
mybutton.image.sprite = Sprite.Create(...);
答案 1 :(得分:0)
在访问子对象之前,请确保在实例化之前启用或禁用子对象,然后在prefab中启用该子对象。 就像我的情况一样,我有一个带有文本子对象的UI Text游戏对象。我在预制中禁用了它,希望在实例化后通过脚本中的引用来启用它。仅当我在预制中保持启用image(child)组件时,它才起作用。
答案 2 :(得分:-1)
尝试更改
Function csvRangeNew(myRange As Range)
Dim csvRangeOutput
Dim entry As Variant
set myRange = intersect(myRange , myRange.parent.usedrange)
For Each entry In myRange
If Not IsEmpty(entry.Value) Then
If entry.Value = "New" Then
If Not IsEmpty(Worksheets("wholelist").Range("A" & entry.Row)) Then
csvRangeOutput = csvRangeOutput & Worksheets("wholelist").Range("A" & entry.Row).Value & ","
End If
End If
End If
Next
csvRangeNew = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function
要
addTypeButton.GetComponentInChildren<Image>().sprite = Sprite.Create(www.texture, new Rect(0, 0, www.texture.width,www.texture.height), new Vector2(0, 0));