首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实例化方法不会在画布中绘制预置按钮,也不会用正确的预置尺寸绘制它。

实例化方法不会在画布中绘制预置按钮,也不会用正确的预置尺寸绘制它。
EN

Stack Overflow用户
提问于 2014-12-16 11:10:03
回答 2查看 4.2K关注 0票数 3

我的场景有基本的游戏对象(相机,带两个孩子的画布,imagebutton)。

我做了一个按钮的预制件,现在预制件在项目视图中,我想从脚本中实例化这个预制件按钮,我希望它在画布中绘制。

为此,我创建了一个脚本文件,并将其作为脚本组件附加到画布上。下面是我的脚本实现:

代码语言:javascript
复制
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 () {

    }
}

当然,suggestionBtn是预置的,这就是为什么我将它引用到脚本变量(将prefab从项目视图拖到脚本组件)。

现在,当我运行游戏时,我注意到预置程序的克隆被添加到层次视图中的所有游戏对象中(我希望在画布中添加它):

而且它也有错误的尺寸(非常小,几乎看不见),在这里,我放大后它是如何看的?

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-16 14:42:04

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

代码语言:javascript
复制
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);
    }

}

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

票数 5
EN

Stack Overflow用户

发布于 2014-12-18 03:07:27

从运行时层次结构视图的屏幕快照来看,实例化按钮并不嵌套在画布下面,因此画布渲染器不会呈现它。

实例化它时,需要将transform.parent设置为画布游戏对象的转换。

代码语言:javascript
复制
var newButton = Instantiate (suggestionBtn, new Vector3 (100, 400, 0), Quaternion.identity) as GameObject;
newButton.transform.parent = GameObject.Find("Canvas").transform;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27503262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档