Unity3d UI位置与窗口大小不同

Unity3d UI位置与窗口大小不同,unity3d,Unity3d,我正在做一个培训项目(Arkanoid)。当奖励格块被摧毁时,划桨会暂时消耗,这个效果由时间条显示。问题是时间条的位置。出于某种原因,它取决于窗口大小。你能帮我理解这个问题的原因和解决方法吗 我为这个案例调整了它的位置,看起来不错: 但当我上场时,它出现在一个奇怪的位置 时间条由以下代码实例化: [SerializeField] TimeBar timeBar; Instantiate(timeBar, timeBar.transform.position, Quaternion.iden

我正在做一个培训项目(Arkanoid)。当奖励格块被摧毁时,划桨会暂时消耗,这个效果由时间条显示。问题是时间条的位置。出于某种原因,它取决于窗口大小。你能帮我理解这个问题的原因和解决方法吗

我为这个案例调整了它的位置,看起来不错:

但当我上场时,它出现在一个奇怪的位置

时间条由以下代码实例化:

[SerializeField] TimeBar timeBar;

Instantiate(timeBar, timeBar.transform.position, Quaternion.identity, GameObject.Find("Game Canvas").transform);
所以位置是由
timeBar.transform.position
设置的-据我所知,它意味着timeBar预置的默认位置


p.S.timebar是一个UI元素,由UI文本和UI图像组成。问题可能与它与画布之间的关系有关?

问题在某种程度上与画布有关,是的,但主要在于您根本没有锚定的UI组件。由于屏幕大小可能会发生很大的变化,为了确保UI元素在所有平台和分辨率上都相对相同,使用了定位点。将它们视为相对于屏幕大小的一个确定点,对象将在该点上显示

选择UI对象时,此对象的检查器顶部应显示一个
RectTrasnform
,它有一个带方框和一些箭头的正方形。此框是此对象的定位点的可视化表示,以及当屏幕分辨率与编辑器中使用的分辨率发生剧烈变化时,它将如何尝试放置

单击此框后,您将看到几个不同的选项。您可以同时设置锚点,这是您想要的位置。我倾向于锚定一个对象,然后将该位置移动到我喜欢的位置。对于您的情况,我会选择左上角的锚点,然后将其拖动到相对于您喜欢的左上角锚点的位置

另一个问题可能是如何设置
画布


我会将您的UI设置为
按屏幕大小缩放
,这样UI可以自动调整自己以适应新的分辨率,但保留您设置的定位点。这样,您的UI是动态的。您还可以设置目标分辨率,即您的UI资产或屏幕分辨率的目标分辨率。除此之外,您还可以通过匹配宽度、匹配高度、扩展或收缩来告诉标量您希望它如何适应屏幕。

我知道您可以在创建没有代码的UI时使用锚定,但是如果您通过代码查找锚定,您可以找到它。锚基本上是缩放点。如果缩放窗口,锚定将始终处于使UI正常工作的相同位置。以下是一个可能有用的链接: