带有滚动矩形的Unity对象池可实现无尽的地图

时间:2018-08-11 19:58:57

标签: c# unity3d infinite-scroll

正如您在视频中看到的那样,我有一个带有ScrollView的映射,该映射在运行时实例化。我的问题是,我正在尝试制作一个对象池系统,以便当用户滚动浏览地图时,它将是无穷无尽的,并且只要滚动就可以继续前进。

我仅限制垂直移动,在代码中我将所有对象放在列表中,并按“ U”键进行测试,我从列表底部取出10个对象并将其放在列表顶部(感觉就像当用户向下滚动时,我将底部的对象放到顶部以使其无穷无尽。)

但是我的问题是,因为我使用网格布局来布局地图预制件,所以与列表中我将对象放置在顶部的位置没有任何区别,因为网格布局系统只是重新定位它们,而所有对象只是好像他们仍然在原来的位置。

我应该怎么做才能实现自己的目标?

视频链接:https://youtu.be/dwNwyK0ZGZc

#region Variables
[SerializeField]
private GameObject buildAreaPrefab;
[SerializeField]
private GameObject parentContent;
[SerializeField]
private GridLayoutGroup myGridLayout;

[SerializeField]
private int size = 10;
[SerializeField]
private int firstSize = 150;

public List<GameObject> poolList = new List<GameObject>();

private ScrollRect scrollRect;

private float lastValue = 0;
#endregion

private void Awake()
{
    scrollRect = GetComponent<ScrollRect>();
}

private void Start()
{
    for (int i = 0; i < firstSize; i++)
    {
        GameObject newObj = Instantiate(buildAreaPrefab, parentContent.transform);
        newObj.name = newObj.name.Replace("(Clone)", i.ToString());
        poolList.Add(newObj);
    }
}

private void Update()
{
    if (Input.GetKeyDown(KeyCode.U))
    {
        //myGridLayout.startCorner = GridLayoutGroup.Corner.LowerLeft;
        for (int i = 0; i < size; i++)
        {
            poolList[i].transform.SetAsLastSibling();
        }
        for (int i = 0; i < size; i++)
        {
            GameObject tempIndex2 = poolList[0];

            poolList.RemoveAt(0);
            poolList.Insert(poolList.Count, tempIndex2);
        }
    }
}

0 个答案:

没有答案