正如您在视频中看到的那样,我有一个带有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);
}
}
}