【问题标题】:How to create object as parent of Canvas如何创建对象作为 Canvas 的父级
【发布时间】:2016-07-23 18:13:30
【问题描述】:

我正在尝试为我的统一项目创建一个新元素,但我需要统一将我的整个对象呈现为 UI 对象,我该如何实现这一点。到目前为止我目前的脚本。

using UnityEditor;
using UnityEngine;

public class OptionSwitch : MonoBehaviour {

    [MenuItem ("GameObject/UI/Switch")]
    static void Switch(){
        GameObject go = new GameObject("switch");
        go.transform.parent = Selection.activeTransform;
        go.transform.localPosition = Vector3.zero;
    }
}

它将是一个选项开关,在文本框的任一侧都有一个按钮,指示活动选项。

我做了更多的研究并想出了这段代码。

using UnityEditor;
using UnityEngine;

public class OptionSwitch : MonoBehaviour {

    [MenuItem ("GameObject/UI/Switch")]
    static void Switch(){

        if (GameObject.Find ("Canvas") != null) {

            // Define Components
            GameObject Canvas   = GameObject.Find("Canvas");
            GameObject Switch   = new GameObject("Switch");
            GameObject Previous = new GameObject("Previous Button");
            GameObject Next     = new GameObject("Next Button");
            GameObject Text     = new GameObject("Textbox");


            // Place Switch
            Switch.transform.parent = Canvas.transform;
            Switch.transform.localPosition = Vector3.zero;

            // Place Previous Button
            Previous.transform.parent = Switch.transform;
            Previous.transform.localPosition = Vector3.zero;

            // Place Text Field
            Text.transform.parent = Switch.transform;
            Text.transform.localPosition = Vector3.zero;

            // Place Next Field
            Next.transform.parent = Switch.transform;
            Next.transform.localPosition = Vector3.zero;
        }
    }
}

【问题讨论】:

  • 那么,现在怎么样了?什么有效,什么无效?另外,需要明确的是,您希望新创建的 GameObject 位于 UI Canvas 下还是作为 UI Canvas 的父级?为什么你有Selection.activeTransform?关于您的问题的问题太多了。
  • @Programmer 我希望对象“switch”成为 UI Canvas 的子对象,我知道您可以通过名称找到对象,但我想设计它以便它甚至可以找到画布如果名称被更改,那是行不通的,我继续寻找并找到一种方法使对象成为画布的子对象,但当画布不被称为“画布”时不会。
  • 您的评论实际上比您的问题更能说明您的问题。检查我的答案。
  • 当我说关闭答案时,我的意思是你接受的是答案而不是删除它。这个答案可以帮助很多人。请取消删除并将其标记为答案。 stackoverflow.com/questions/38546130/… 谢谢。
  • 抱歉,这是我的错误,我会改正的

标签: c# unity3d


【解决方案1】:

你必须先找到Canvas GameObject。 Canvas GameObject 附加了 Canvas 组件。因此,您使用FindObjectOfType 来查找Canvas 组件。然后,您可以将该 Canvas 脚本的实例转换为 GameObject。原始代码的修复:

[MenuItem("GameObject/UI/Switch")]
static void Switch()
{
    //Create new GameObject
    GameObject go = new GameObject("switch");


    //Find Canvas in the Scene
    Canvas canvas = (Canvas)GameObject.FindObjectOfType(typeof(Canvas));

    //Get Canvas GameObject
    GameObject canvasGameObject = canvas.gameObject;

    //Make the new GameObject child of the Canvas
    go.transform.parent = canvasGameObject.transform;
    go.transform.localPosition = Vector3.zero;

    //Change the new GameObject Layer to UI
    go.layer = 5; //Or go.layer = canvasGameObject.layer;

    //Add Rect Transform to it
    go.AddComponent<RectTransform>();
}

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2013-04-06
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多