2017-10-07 6 views
0

J'ai un gameobject1 (ajouté Scroll Rect composant) et à l'intérieur de celui-ci une autre gameobject2 (Le contenu du composant Scroll rect) .Dans gameobject2 a images.The nombre d'images peut être 10 ou 20 .. (Tous les chiffres) .La Movement Type est Elastic. Comme vous le savez, il arrête de défiler seulement jusqu'à gameobject2longueur de hauteur. Comment s'arrêter sur nombre dynamique de longueur.En gameobject2 le nombre d'images peut être différent. Cela dépend des résultats de la recherche. Les résultats peuvent être 5,8, ou 200. Donc, je dois faire défiler jusqu'à la fin des résultats de recherche.Alors comment arrêter de défiler sur exactement la longueur dans Scroll rect composant?Comment créer un arrêt dynamique Scroll Rect in unity?

Répondre

0

Vous pouvez utiliser le composant ContentSizeFitter. GameObject avec le nom "Content", est un contenu pour le composant scrollRect de "ScrollView" -gameObject.

Scroll rect's content

Image

0

RectTransform#SetSizeWithCurrentAnchors

-je utiliser ce lot lors de la construction des listes de défilement dynamiques. Après avoir ajouté tous les éléments que je veux (et chacun ayant une taille connue, et tous positionnés en utilisant cette taille) je mets à jour le contentRectTransform avec la nouvelle taille (nombre total d'objets ajoutés * taille de l'objet).

Par exemple, j'ai ce code:

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));