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

我做了一个按钮的预制件,现在预制件在项目视图中,我想从脚本中实例化这个预制件按钮,我希望它在画布中绘制。
为此,我创建了一个脚本文件,并将其作为脚本组件附加到画布上。下面是我的脚本实现:
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从项目视图拖到脚本组件)。

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

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

因此,我的问题是,如何使用预制件的正常大小正确实例化预制件,并相对于画布(画布的子)正确地定位它?
谢谢
发布于 2014-12-16 14:42:04
通过将实例赋值给变量,然后更改其父变量,您可以正确地初始化转换(在正确的游戏对象层次结构下)。
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。
发布于 2014-12-18 03:07:27
从运行时层次结构视图的屏幕快照来看,实例化按钮并不嵌套在画布下面,因此画布渲染器不会呈现它。
实例化它时,需要将transform.parent设置为画布游戏对象的转换。
var newButton = Instantiate (suggestionBtn, new Vector3 (100, 400, 0), Quaternion.identity) as GameObject;
newButton.transform.parent = GameObject.Find("Canvas").transform;https://stackoverflow.com/questions/27503262
复制相似问题