我在Unity中创建了一个菜单,其中填充了来自SQLite数据库的结果。但是当我创建菜单时,整个游戏会在查询数据库时暂停一会儿。
为了解决这个问题,我正在尝试将菜单的创建和填充数据分开(也就是说,在查询完成之前,菜单将只显示“加载中”)。
我一直在尝试使用yield-return协程来实现这一点,但游戏仍然会冻结。下面是一些伪代码,说明我正在做什么...
为了解决这个问题,我正在尝试将菜单的创建和填充数据分开(也就是说,在查询完成之前,菜单将只显示“加载中”)。
我一直在尝试使用yield-return协程来实现这一点,但游戏仍然会冻结。下面是一些伪代码,说明我正在做什么...
void createMenu () {
// code to create menu...
StartCoroutine(getData());
}
IEnumerator getData () {
List<string> sqlResults = Database.query("SELECT * FROM table");
yield return null;
updateMenu();
}
void updateMenu() {
// replaces "loading" strings with sql data results
}
我这样做是错的吗?还是我在错误地使用协程?
createMenu
函数中调用runQuery("SELECT * FROM table");
。它不应该阻塞或冻结Unity。如果不是这样,那么问题就在于updateMenu()
函数,你也应该发布它。 - ProgrammerThread
而不是使用ThreadPool
。此外,它不像我制作的UnityThread
脚本那样是线程安全的,但它应该可以工作。 - ProgrammerUnityThread
是由我编写的,它存在的目的是为了让你不必自己编写。它使在 Unity 中使用线程更加简单和安全。就这样。如果你不想使用它,你可以编写自己的包装器。它的主要目标是简化在 Unity 中使用线程的过程。 - Programmer