在运行时动态添加图像 - Unity 5

时间:2016-10-09 17:32:10

标签: unity3d unityscript unity5

在我基于团结的Android游戏中,我希望根据每个级别的问题数量动态添加图像。显示图像以供参考。每个正确的答案都将标记为绿色,错误的答案将标记为红色。我是团结的新手,并努力寻找实现这一目标的步骤。

对此要求的示例的任何帮助都将是一个很大的帮助。

enter image description here

2 个答案:

答案 0 :(得分:1)

我曾经写过一个脚本,用于根据每个级别动态创建按钮。我所做的是在场景中创建第一个按钮,并根据第一个按钮添加其他按钮。下面是我的代码的shell:

// tutorialButton and levelButtons are public variables which can be set from Inspector
RectTransform rect = tutorialButton.GetComponent<RectTransform> ();

for (int i = 1; i < levelSize; i++) {
    // Instantiate the button dynamically
    GameObject newButton = GameObject.Instantiate (tutorialButton); 

    // Set the parent of the new button (In my case, the parent of tutorialButton)
    newButton.transform.SetParent (levelButtons.transform);

    //Set the scale to be the same as the tutorialButton
    newButton.transform.localScale = tutorialButton.transform.localScale;

    //Set the position to the right of the tutorialButton
    Vector3 position = tutorialButton.transform.localPosition;
    position.x += rect.rect.width*i;
    newButton.transform.localPosition = position;
}

我不确定这是否是正确的方法,因为根据不同的屏幕尺寸和画布,它可能会或可能不会产生意外结果,但希望它能让您了解动态创建对象。

答案 1 :(得分:1)

我不确定这是否有帮助,但如果您在画布下拥有场景中的所有图像,那么您只需要在脚本上拖动画布并使用

//level-1 is to keep the array notation FindObjectOfType<NameOfScript>.ChangeColor(level-1,Color.green);

或者你也可以

//level-1 is to keep the array notation FindObjectOfType<NameOfScript>.RevertColor(level - 1);

这是剧本:

//Keep it private but you still see it in inspector
//#Encapsulation :)
[SerializeField]
private Canvas _canvas;

private Image[] _images;
//keep the original colors in case you want to change back
private Color[] _origColors;

void Start () {
    _images = GetComponentsInChildren<Image>();
    _origColors = new Color[_images.Length];
    for (int i = 0; i < _images.Length; i++)
    {
        _origColors[i] = _images[i].color;
    }

}
//Reverts the color of the image back to the original
public void RevertToOriginal(int imageIndex)
{
    _images[imageIndex].color = _origColors[imageIndex];
}
//Change to color to the coresponding index, starts from 0
public void ChangeColor(int imageIndex, Color color)
{
    _images[imageIndex].color = color;
}

P.S如果您希望它只在最后可见,您可以创建一个方法,为画布启用=(true或false)。因此,在级别结束时保持虚假,并在要显示时将其设为真,而在每个答案之后,根据结果调用ChangeColor。 为了方便起见,您可以使用:

NameOfScript variableName = FindObjectOfType<NameOfScript>();

之后你就打电话给

variableName.ChangeColor(level - 1, Color.green);

你把脚本放在哪里也没关系。我会在场景中制作一些经理(空GameObject)并把它放在那里。