Unity3D制作横向滚动动态自适应列表

Unity3D制作横向滚动动态自适应列表


我新建了一个测试场景,结构就是添加一个Scroll Rect的组件,然后在Content上添加了一个Horizontal Layout Group组件,item是需要在Content下动态生成的物体。
Unity3D制作横向滚动动态自适应列表_第1张图片
Unity3D制作横向滚动动态自适应列表_第2张图片
Unity3D制作横向滚动动态自适应列表_第3张图片
为了方便查看,我添加了背景和文字,整体如下。
Unity3D制作横向滚动动态自适应列表_第4张图片
然后下面是代码的部分。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScrollHorizontal : MonoBehaviour
{
    private GameObject item;
    private Transform content;
    private Vector2 originSize;
    void Start()
    {
        content = GameObject.Find("Content").GetComponent<Transform>();
        originSize = GameObject.Find("Content").GetComponent<RectTransform>().sizeDelta;
        item = (GameObject)Resources.Load("item");
    }
    private void AddItem(int count)
    {
        for(int i=0; i < count; i++)
        {
            item = Instantiate(item);
            item.transform.SetParent(content);
        }
        //获取当前的item的实际个数
        int itemCount = content.childCount;
        //计算当前实际生成item所需要的content的宽度
        float ScrollRectX = itemCount * ((item.GetComponent<RectTransform>().sizeDelta.x)
            + content.GetComponent<HorizontalLayoutGroup>().spacing);
        //比原先小则,保持原有尺寸不变,反之,宽度设置为所需要的
        if (ScrollRectX <= originSize.x)
        {
            content.GetComponent<RectTransform>().sizeDelta = originSize;
        }
        else
        {
            content.GetComponent<RectTransform>().sizeDelta = new Vector2(ScrollRectX, originSize.y);
        }
    }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            AddItem(1);
        }
    }
}

你可能感兴趣的:(Unity3D)