如何统一创建动态停止滚动矩形?

Posted

技术标签:

【中文标题】如何统一创建动态停止滚动矩形?【英文标题】:How to create dynamic stopping Scroll Rect in unity? 【发布时间】:2017-10-07 09:16:01 【问题描述】:

我有一个gameobject1(添加了Scroll Rect 组件),其中还有一个gameobject2Scroll rect 组件的内容)。在gameobject2 中有图像。图片可以是 10 或 20..(任何数字)。Movement TypeElastic。如您所知,它将停止滚动直到 gameobject2 高度的长度。如何停止动态数字的长度。在gameobject2 中,图像的数量可以不同。这取决于搜索结果。结果可以是 5,8 或 200。所以我需要滚动到搜索结果的最后一个。那么如何在 Scroll rect 组件中停止滚动精确长度?

【问题讨论】:

【参考方案1】:

您可以使用 ContentSizeFitter 组件。名称为“Content”的GameObject,是“ScrollView”-gameObject的scrollRect组件的内容。

【讨论】:

【参考方案2】:

RectTransform#SetSizeWithCurrentAnchors

我在构建动态滚动列表时经常使用它。添加所有我想要的项目(并且每个项目都具有已知大小,并且都使用该大小定位)后,我将contentRectTransform 更新为新大小(添加的对象总数* 对象的大小)。

例如,我有这样的代码:

int i = 0;
//for each item in a list of skills...
IEnumerator<Skill> list = SkillList.getSkillList();
Transform skillListParent = GuiManager.instance.skillPanel.transform;
while(list.MoveNext()) 
    Skill sk = list.Current;
    //create a prefab clone...
    GameObject go = Main.Instantiate(PrefabManager.instance.SKILL_LISTITEM, skillListParent) as GameObject;
    //set its position...
    go.transform.localPosition = new Vector3(5, i * -110 -5, 5);
    //add a button event or other data (some lines omitted)...
    Transform t1 = go.transform.FindChild("BuyOne");
    t1.GetComponent<Button>().onClick.AddListener(delegate 
        doBuySkill(sk);
    );
    t1.GetChild(0).GetComponent<Text>().text = Main.AsCurrency(sk.getCost(1)) + " pts";
    //track how many...
    i++;

//update rect transform
((RectTransform)skillListParent).SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, (i * 110 + 10));

【讨论】:

以上是关于如何统一创建动态停止滚动矩形?的主要内容,如果未能解决你的问题,请参考以下文章

如何统一停止相机跟随Y

嵌套矩形(动态规划)

如何统一平移动画窗口?

用统一的一个结构管理动态创建

Tomcat的生命周期管理

Python 统一动态创建多个model对应的modelForm类(type()函数)