UI 预制件实例化为 UI 父级的子级
Instatiation of UI prefab as child of UI parent
我正在尝试一种在 canvas 内安装 TMP 的方法。当我的预制件出现尺寸与原来的预制件不同时,我不知道是什么问题。
public GameObject MyParent;
public GameObject MyChild;
public void Start()
{
GameObject mChild = Instantiate(MyChild);
mChild.transform.parent = MyParent.transform;
}
这是更改任何变换的父级时的常见现象。
解释与解决方案 -
在 Unity 中,层次结构中任何对象的位置、比例和旋转都是相对于其父对象的。
这就是为什么您的 "MyChild" 对象的大小在您成为 canvas 的子对象后立即更新的原因。
解决此问题 - 存储原始对象的大小(比如 = originalSize)并在更改对象的父对象后,将新对象的大小设置为 originalSize 变量
public GameObject MyParent;
public GameObject MyChild;
private Vector3 originalSize;
public void Start()
{
GameObject mChild = Instantiate(MyChild);
originalSize = mChile.transform.scale;
mChild.transform.parent = MyParent.transform;
mChild.transform.localScale = originalSize;
}
这应该可以解决问题。
我正在尝试一种在 canvas 内安装 TMP 的方法。当我的预制件出现尺寸与原来的预制件不同时,我不知道是什么问题。
public GameObject MyParent;
public GameObject MyChild;
public void Start()
{
GameObject mChild = Instantiate(MyChild);
mChild.transform.parent = MyParent.transform;
}
这是更改任何变换的父级时的常见现象。
解释与解决方案 -
在 Unity 中,层次结构中任何对象的位置、比例和旋转都是相对于其父对象的。
这就是为什么您的 "MyChild" 对象的大小在您成为 canvas 的子对象后立即更新的原因。
解决此问题 - 存储原始对象的大小(比如 = originalSize)并在更改对象的父对象后,将新对象的大小设置为 originalSize 变量
public GameObject MyParent;
public GameObject MyChild;
private Vector3 originalSize;
public void Start()
{
GameObject mChild = Instantiate(MyChild);
originalSize = mChile.transform.scale;
mChild.transform.parent = MyParent.transform;
mChild.transform.localScale = originalSize;
}
这应该可以解决问题。