在可滚动面板中更改 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 的 anchorMin 和 anchorMax 值必须相同。否则,sizeDelta 有不同的含义,例如“与拆分锚点的距离”。
【讨论】:
滚动条内定位代码:rectTransform.anchoredPosition = new Vector2(rectTransform.anchoredPosition.x, yValue);
和更改面板大小:rectTransform.sizeDelta = new Vector2(width, height);
以上是关于在可滚动面板中更改 UI 游戏对象(矩形变换)的位置的主要内容,如果未能解决你的问题,请参考以下文章
如何在可观察集合的 UI 中立即反映任何添加、删除、字段更改