【问题标题】:Unity: Vertical Group Layout Scroll doesn't work with AndroidUnity:垂直组布局滚动不适用于 Android
【发布时间】:2021-05-23 15:49:20
【问题描述】:

我正在做一个可滚动的值列表。

我是使用 Item 模板 完成的,该模板由 Layout Element 设置,嵌套在 Vertical Layout Group 对象。

项目模板由图片和文字描述组成。

我用来填充列表的脚本很简单for

for (int i = 0; i < details.Count && i < LenSize; i++){
    Transform transf = Instantiate(template, container);
    RectTransform trasnf2 = transf.GetComponent<RectTransform>();

    height = -3 * i;

    trasnf2.anchoredPosition = new Vector2(0, height);
    transf.gameObject.SetActive(true);

    transf.Find("Image").GetComponent<Text>().text = details[i].image;
    transf.Find("Desc").GetComponent<Text>().text = 
    details[i].description;
}

当我从我的 PC 运行应用程序时,一切正常,我可以通过“左键单击 + 向上/向下拖动”或鼠标滚轮滚动列表。

当我构建应用程序并从我的 android 设备运行它时,我的问题出现了,我无法使用触摸屏滚动列表。 (触摸屏输入工作正常,我有一些按钮,他们工作)

有人可以帮我解决我的问题吗?

我发现我可以使用输入管理器来捕获输入事件...但我不确定如何使用它在 Android 上“滚动”,因为如果我使用 垂直布局组,我移动整个对象并且不滚动内部元素,否则,如果我更改子元素的偏移量(Item Templates)我会更改单个元素的位置“打破“垂直布局组的布局;

我试图找到解决方案,但我是新手,应用它时显然没有任何效果。

我做错了什么?

【问题讨论】:

  • 您只是想创建一个可滚动的对象列表吗?如果是这样,您不需要代码来实现这一点。我可以发布一个仅使用 UI 组件的可滚动列表示例。
  • @TEEBQNE 我在开始时尝试了可滚动的对象列表,但我遇到了 UI 问题。现在我不记得确切的原因(几周前我做了),但我使用垂直布局组来解决这个问题。如果你愿意,你可以发帖,如果可行,我会尝试。

标签: android unity3d touch-event vertical-scrolling


【解决方案1】:

如果您的目标是制作 UI 对象的可滚动列表,这里是我在该过程中制作的 gif。它贯穿布局和每个组件并且它正在工作。

如果您想在运行时将对象动态添加到此列表,请使用Panel_Content 转换并使用Instantiate(yourPrefab, Pane_Content.transform, false) 实例化对象。如果您在此示例中遇到问题,请告诉我。

【讨论】:

  • 嗨@TEEBQNE,您的解决方案与我的非常相似。我更改了我的设置以使用您的设置并且......没有任何变化。从统一/PC 执行时工作,但当我在 Android 设备上使用它时仍然无法工作,滚动不起作用。 :(
  • @GiorgiaRondin 当您的 UI 转售到移动设备时,可能有另一个 UI 元素阻止了点击。尝试将项目构建到 windows/Mac 并查看问题是仅构建还是仅 android。
  • 你是对的,我将项目构建到 windows/Mac 并且在构建项目时发生了问题。如何找到阻止点击的 UI 元素?是否有一些技巧或提示可以找到它?
  • @GiorgiaRondin 我会让你的画布模式缩放到屏幕大小。我还将在所有不需要单击的图像或文本上禁用 Raycastable 字段。有一种在编辑器中调试它的好方法,但在构建中不是一种很好的方法。您可以从事件系统打印当前悬停或单击的游戏对象,并在构建项目时启用显示调试日志。它可能适合屏幕面板。
  • 我来晚了,真的很抱歉。无论如何,我尝试了一个新项目。在我不知道我多次尝试之后......我发现了问题所在。现在它可以正常工作了!!!!!!! Thxxx你非常非常^^