unity3d 如何使一个“滚动系统”与按钮统一?

xoshrz7s  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(120)

标题有点不清楚,所以这里有一个详细的解释:我想在移动的游戏中做一个商店。当你点击打开商店的按钮时,会显示不同的物品类型(垂直排序),但是有很多元素,例如一个物品类型可以在一行中显示它们(水平排序)。所以我想你可以通过添加一个“滚动系统”来解决这个问题,它的工作原理是这样的:你点击一个按钮,以前不能显示的元素就会显示出来。你还可以看到以前显示过的元素之一,这样你就可以看到你的行在哪个方向循环了。它可以是一个平滑的移动,也可以是瞬间的。
以下是使其不那么容易实现的条件:

  • 当你买了一件东西,它应该从商店里消失。
  • 当你在结束时,一个按钮应该出现,让你循环回到之前的项目。
  • 它需要支持多达8个元素。

Here a picture of how I imagine the shop:
我想我可以使用一个滚动矩形,禁用滚动,并根据你点击按钮的次数来改变 horizontalNormalizedPosition。我还没有尝试过,但我想如果我有6个元素,每次我点击按钮来显示我添加的其他元素,比方说0.2f到 horizontalNormalizedPosition,我买了一个项目(所以它被删除了),0.2就不再起作用了,因为其他元素的一点可能会被显示出来,或者类似的东西。所以你需要跟踪元素的数量,并根据它和它们的大小来改变值。
但是有没有更简单的解决方案,或者解决问题的方案,这样你只需要写代码而不需要添加一个scroll rect?
谢谢

wrrgggsh

wrrgggsh1#

也许您可以使用Mask组件每次只显示两个购物按钮,并根据您的需要启用和禁用左右滚动按钮。
为此,需要并排放置三个对象:一个滚动左按钮,一个面板遮罩和一个滚动右按钮。Here是一个链接的图像显示如何设置这一点。
面板蒙版对象中必须包含蒙版组件,这样您只能显示其子对象的一部分。将包含shop itens数组的对象添加为面板蒙版对象的子对象。单击右键或左键时,将移动shop itens数组的变换位置。

os8fio9y

os8fio9y2#

您需要调整逻辑以在商店中动态创建您的项目。最明显的逻辑将是:

  • 制作一个几乎无代码的脚本预制件,把它想象成关于视图的。
  • 将您的产品创建为非Monobehavior C#类。
  • 让您的商店对类似ShowProducts(List<MyProduct> products)的调用做出React
  • 对于第一次迭代,您可以删除ShowProducts开头的所有当前产品,并为列表中显示的每个MyProduct示例创建预制件,然后将其添加到根对象。

我认为这足以理解原理。在这种情况下,为了能够显示更多/更少的项目,您只需要使用不同的项目集合调用ShowProducts。此外,您可以使用具有不同过滤器的多个集合,例如,等等。

相关问题