目录
1.目的
1.1 通过Update将多线程或异步的东西在主线程中处理
2.参考
3.注意
4.操作:成功
4.1新建变量,让其作为异步、主线程中间的桥梁
/// <summary>UserData对象,目的为了异步处理【91在客户单解析房间列表信息,并加载房间列表UI:添加】</summary>
private List<UserData> udList = null;
4.2. 再做一个异步的函数,专门处理回调函数事件
/// <summary>
/// 异步加载房间【Author:XZY Time:2022 04 14】【91在客户单解析房间列表信息,并加载房间列表UI:添加】
/// </summary>
/// <param name="udList"></param>
public void LoadRoomItemSync(List<UserData> udList)
{
this.udList = udList; //异步加载时候需要使用此来赋值【91在客户单解析房间列表信息,并加载房间列表UI】
}
/// <summary>
/// 加载房间【Author:XZY Time:2022 04 02】【84通过代码动态创建房间列表:添加】
/// </summary>
/// <param name="count">加载房间的个数</param>
private void LoadRoomItem(List <UserData> udList)
{
int count=0;
for (int i = 0; i < count; i++)
{
GameObject roomItem = GameObject.Instantiate(roomItemPrefab);//实例化对象【84通过代码动态创建房间列表:添加】
roomItem.transform.SetParent(roomLayout.transform);//设置父物体【84通过代码动态创建房间列表:添加】
//设置 roomLayout 的高度,让其能显示所有的房间
int roomCount = GetComponentsInChildren<RoomItem>().Length;//得到所有房间数量【84通过代码动态创建房间列表:添加】
Vector2 size = roomLayout.GetComponent<RectTransform>().sizeDelta;//得到RectTransform组件的大小【84通过代码动态创建房间列表:添加】
roomLayout.GetComponent<RectTransform>().sizeDelta = new Vector2(size.x,
roomCount * (roomItemPrefab.GetComponent<RectTransform>().sizeDelta.y + roomLayout.spacing));//将 roomLayout 的高度变高,能显示所有房间【84通过代码动态创建房间列表:添加】
}
}
4.3. 在Update中将异步和主线程关联起来
private void Update()
{
if (udList!=null)
{
LoadRoomItem(udList);//【91在客户单解析房间列表信息,并加载房间列表UI:添加】
udList = null;//【91在客户单解析房间列表信息,并加载房间列表UI:添加】
}
}