我的场景有基本的游戏对象(相机、带有两个 child 的 Canvas image
和 button
)。
我制作了一个按钮的预制件,现在该预制件位于项目 View 中,我想从脚本中实例化这个预制件按钮,并且我希望它被绘制在 Canvas 内。
为此,我制作了一个脚本文件,将其作为脚本组件附加到 Canvas 上。这是我的脚本实现:
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 () {
}
}
当然,suggestBtn 是预制件,这就是为什么我将它引用到脚本变量中(将预制件从项目 View 拖到脚本组件)。
现在,当我运行游戏时,我注意到预制件的克隆被添加到层次 View 中所有游戏对象的上方(我希望将它添加到 Canvas 中):
而且它的尺寸错误(非常非常小,几乎看不见),这是我放大后的样子
所以我的问题是如何使用其正常大小正确实例化预制件并将其相对于 Canvas ( Canvas 的子项)正确定位?
谢谢
最佳答案
您可以通过将实例分配给变量然后更改其父级来正确初始化转换(在正确的游戏对象层次结构下)。
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
。关于c# - Instantiate 方法不会在 Canvas 内绘制预制按钮,也不会使用正确的预制尺寸绘制它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27503262/