在可滚动面板中更改 UI 游戏对象(矩形变换)的位置

Posted

技术标签:

【中文标题】在可滚动面板中更改 UI 游戏对象(矩形变换)的位置【英文标题】:Change position of UI GameObjects (RectTransform) in scroll bar pannel 【发布时间】:2021-10-09 10:15:17 【问题描述】:

所以我的panel 有一个“紧凑视图”开关,我想让一切变得紧凑!在紧凑和间隔视图模式下,我有所有 Mod 的锚定位置(从顶部中心)。考虑到它有滚动条,有什么方法可以轻松地在它们之间切换?我已经尝试通过滚动条值来转换位置并对其计时,但到目前为止还没有运气!任何帮助将不胜感激:)

【问题讨论】:

您目前在紧凑视图中获得的结果是什么? 目前它什么也没做,我正试图弄清楚它怎么可能? 您可以添加当前代码的 sn-p 设置位置但不执行任何操作吗? 这不是代码,我只有每个东西应该在哪里的锚定位置,但 recttransform.transform.position = new vector3(x, y, 0) 或类似的东西(那是我的记忆)。这段代码似乎对屏幕上的像素进行定位,而不是相对于滚动条值和不同分辨率(可以拉伸面板)的锚定位置。我在问是否有一种简单的方法可以更改锚定位置以形成紧凑的视图。谢谢! 谢谢,工作了???提及) 【参考方案1】:

在 UI 系统中,使用 rectTransform.anchoredPosition 而不是 rectTransform.position 来更改锚定位置。在 Screen Space - Overlay 模式下,两者在某些情况下可能会实现相同的效果,但在其他画布渲染模式或滚动视图中,更改位置可能会导致锚定位置不正确。

要更改 RectTransform 的尺寸,请使用 rectTransform.sizeDelta。为了让 sizeDelta 实际代表 RectTransform 的尺寸,RectTransform 的 anchorMinanchorMax 值必须相同。否则,sizeDelta 有不同的含义,例如“与拆分锚点的距离”。

【讨论】:

滚动条内定位代码:rectTransform.anchoredPosition = new Vector2(rectTransform.anchoredPosition.x, yValue); 和更改面板大小:rectTransform.sizeDelta = new Vector2(width, height);

以上是关于在可滚动面板中更改 UI 游戏对象(矩形变换)的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在可观察集合的 UI 中立即反映任何添加、删除、字段更改

如何在页面滚动时获取嵌套面板的相对坐标

在可点击元素上启动时,Appium 无法在 Android App 中滚动

如何在闪亮中为侧边栏面板添加滚动条?

变换工具

使用 Unity 5 UI 进行捏合缩放