如何统一创建动态停止滚动矩形?
Posted
技术标签:
【中文标题】如何统一创建动态停止滚动矩形?【英文标题】:How to create dynamic stopping Scroll Rect in unity? 【发布时间】:2017-10-07 09:16:01 【问题描述】:我有一个gameobject1
(添加了Scroll Rect
组件),其中还有一个gameobject2
(Scroll rect
组件的内容)。在gameobject2
中有图像。图片可以是 10 或 20..(任何数字)。Movement Type
是 Elastic
。如您所知,它将停止滚动直到 gameobject2
高度的长度。如何停止动态数字的长度。在gameobject2
中,图像的数量可以不同。这取决于搜索结果。结果可以是 5,8 或 200。所以我需要滚动到搜索结果的最后一个。那么如何在 Scroll rect
组件中停止滚动精确长度?
【问题讨论】:
【参考方案1】:您可以使用 ContentSizeFitter 组件。名称为“Content”的GameObject,是“ScrollView”-gameObject的scrollRect组件的内容。
【讨论】:
【参考方案2】:RectTransform#SetSizeWithCurrentAnchors
我在构建动态滚动列表时经常使用它。添加所有我想要的项目(并且每个项目都具有已知大小,并且都使用该大小定位)后,我将content
的RectTransform
更新为新大小(添加的对象总数* 对象的大小)。
例如,我有这样的代码:
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));
【讨论】:
以上是关于如何统一创建动态停止滚动矩形?的主要内容,如果未能解决你的问题,请参考以下文章