Canvas Screen Scaling with script Instantiated objects?

时间:2015-03-17 09:12:50

标签: unity3d

有人可以向我解释为什么,在编辑器中我的实例化商店UI看起来很精彩(左)但是当在设备上运行时(右),它看起来像是压扁了吗?就像这样(请原谅这个狡猾的凸轮图片!):

In Editor Wonky

UI栏是预制件,包含单独的Canvas和各种UI元素。每个画布都手动设置为使用屏幕缩放,参考分辨率设置为X:320 Y:480,并设置为使用宽度作为缩放的基础。事实证明,这在我之前的比赛中表现得非常出色,但这一点似乎并不成立。我甚至手动设置每个实例化对象'用于在脚本中缩放的属性,但仍然没有。

我唯一不同的做法是在运行时通过实例化UI预制件并在创建商店时填充UI来构建UI。

有没有人见过这个?知道如何解决它吗?

1 个答案:

答案 0 :(得分:3)

当您在代码中实例化预制件然后将该预制件添加到某个父件时,unity ui系统会尝试补偿预制件在创建时的大小与画布缩放器更新后的大小之间的差异。< / p>

当我在我的代码中执行此类操作时,我使用此扩展名:

public static void SetParentAndReset(this RectTransform rect, Transform parent) {
    rect.SetParent(parent);
    rect.localScale = Vector3.one;
    rect.localPosition = Vector3.zero;
}
...
var newObj = Instantiate(prefab);
var rect = newObj.GetComponent<RectTransform>();
rect.SetParentAndReset(parent);
rect.localPosition = new Vector3(1f, 1f, 1f); // set the actual position