实例化方法不会在画布内绘制预制按钮,也不会以正确的预制尺寸绘制它

Mal*_*loc 3 c# canvas unity-game-engine

我的场景具有基本的游戏对象(相机,带两个孩子的帆布imagebutton)。 在此处输入图片说明

我制作了一个按钮的预制件,现在该预制件位于项目视图上,我想在脚本中实例化此预制件按钮,并希望将其绘制在画布中。

为此,我制作了一个脚本文件,将其作为脚本组件附加到画布上。这是我的脚本实现:

using UnityEngine;

public class QuizManager : MonoBehaviour {

    public Transform suggestionBtn;

    // Use this for initialization
    void Start () {
        Instantiate (suggestionBtn, new Vector3 (100, 400, 0), Quaternion.identity);
}


// Update is called once per frame
    void Update () {

    }
}
Run Code Online (Sandbox Code Playgroud)

当然,proposalBtn是预制的,这就是为什么我将其引用到脚本变量的原因(将预制件从项目视图拖到脚本组件)。

在此处输入图片说明

现在,当我运行游戏时,我注意到预制的克隆已添加到层次结构视图中所有游戏对象之上(我希望将其添加到画布中):

在此处输入图片说明

而且尺寸错误(非常小,几乎看不见),这里是放大后的外观

在此处输入图片说明

因此,我的问题是如何以正常大小正确地实例化预制件,并相对于画布(画布的子对象)正确地定位预制件?

谢谢

Var*_*lex 5

通过将实例分配给变量,然后更改其父级,可以正确初始化转换(在正确的游戏对象层次结构下)。

public class QuizManager : MonoBehaviour {

    public Transform suggestionBtn;

    // Use this for initialization
    void Start () {
        Transform clone =  (Transform)Instantiate (suggestionBtn, 
                           new Vector3 (100, 400, 0), Quaternion.identity);

        // make instance the child of current object
        clone.parent = gameObject.transform; 

        // adjust the scale
        clone.transform.localScale = new Vector3(Xval, Yval, Zval);
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以在实例化后localScale从分配的clone变量中更改。