【问题标题】:Add items to Canvas Unity C#将项目添加到 Canvas Unity C#
【发布时间】:2016-03-16 17:09:21
【问题描述】:

我正在尝试在 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 添加新按钮。

如果按钮是游戏对象并且我无法将其转换为按钮,我如何添加 OnClick 事件?

有人可以帮我吗?

【问题讨论】:

    标签: c# canvas unity3d


    【解决方案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);
    
            }
    

    当初始化游戏对象时,Unity3D 在世界空间中以给定的比例和旋转创建它们。当您将画布设置为父级时,有时比例设置为零或不是您想要的。这同样适用于旋转。这就是我每次动态填充 UI 时添加这些代码行的原因。

    当然referenceToCanvas 是对画布对象的引用;)

    【讨论】:

    • 如何创建该引用?
    【解决方案2】:

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

    2-)对于您的第二个问题,您可以轻松实现,只需向您要单击的对象添加一个对撞机,并向该对象添加一个脚本。并将 OnMouseDown() 方法添加到此脚本中,每当您单击此对象时,都会调用此方法。

    【讨论】:

      【解决方案3】:

      1 见 Burak,请使用 Transform.SetParent

      对于 2,我建议创建一个空的 GameObject 并向其添加一个 UI 按钮以及您需要的任何其他内容。将其设为预制件并实例化它。

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 2018-04-21
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多