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;
}

这应该可以解决问题。