将项添加到Canvas Unity C#

时间:2016-03-16 17:09:22

标签: c# canvas unity3d

我正在尝试在C#中动态添加项目到我的画布。

这是我想要做的事情

public class MyScript : MonoBehaviour
{

    private List<GameObject> _buttons;
    private GameObject _canvas;

    public MyScript()
    {
        _buttons = new List<GameObject>();
    }
    // Use this for initialization
    void Start()
    {
        for (int i = 0; i < 3; i++)
        {
            var button = Instantiate(Resources.Load("myButton", typeof(GameObject))) as GameObject;
            if (button == null) continue;
            button.GetComponent<RectTransform>().position = new Vector3(i, i, 0);
        }
    }
}

我有我的buttonPrefab,它位于Canvas中。调试后我看到我的新按钮已创建,但它们不在Canvas中,而且正常,因为我没有在代码中添加它们。关键是我不知道如何向Canvas添加新按钮。

如果按钮是GameObjects并且我无法将其转换为Button,我还可以如何添加OnClick事件?

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

1-)为了在Canvas中添加新按钮你需要让你的canvas对象成为这些按钮的父对象,你需要使用setParent方法来看看这里 http://docs.unity3d.com/ScriptReference/Transform.SetParent.html

2-)对于第二个问题,您可以轻松实现只需在对象中添加一个碰撞器,然后将对象添加到对象中。并将OnMouseDown()方法添加到此脚本,每当您单击此对象时,将调用此方法。

答案 1 :(得分:1)

回答如何实例化:当这样做时,你需要记住一些事情。

但首先让我们展示一些代码:

        for (int i = 0; i < 3; i++)
        {
            var button = (GameObject)Instantiate(Resources.Load("myButton", typeof(GameObject))) as GameObject;
            if (button == null) continue;
            button.transform.SetParent (referenceToCanvas.transform);
            button.transform.localScale = Vector3.one;
            button.transform.localRotation = Quaternion.Euler (Vector3.zero);
            button.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(i, i, 0);

        }

当实现GameObjects时,Unity3D会在给定比例和旋转的世界空间中创建它们。当您将画布设置为父级时,有时缩放比例将设置为零或不是您想要的。这同样适用于轮换。因此,每当我动态填充UI时,我就会添加这些代码行。

当然referenceToCanvas是对canvas对象的引用;)

答案 2 :(得分:0)

1见Burak,请使用Transform.SetParent

对于2我建议创建一个空的GameObject并添加一个UI按钮,以及你需要的东西。将它作为预制件并实例化它。