gpt4 book ai didi

c# - Instantiate 方法不会在 Canvas 内绘制预制按钮,也不会使用正确的预制尺寸绘制它

转载 作者:行者123 更新时间:2023-11-30 14:54:27 29 4
gpt4 key购买 nike

我的场景有基本的游戏对象(相机、带有两个子imagebutton 的 Canvas )。 enter image description here

我做了一个按钮的预制件,现在预制件在项目 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 () {

}
}

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

enter image description here

现在,当我运行游戏时,我注意到预制件的克隆已添加到层次结构 View 中所有游戏对象的上方(我希望将其添加到 Canvas 内):

enter image description here

而且它的尺寸也不对(非常非常小,几乎看不见),这是我放大后的样子

enter image description here

所以我的问题是如何使用正常大小正确实例化预制件并将其相对于 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);
}

}

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

关于c# - Instantiate 方法不会在 Canvas 内绘制预制按钮,也不会使用正确的预制尺寸绘制它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503262/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com