3

我有两个后台线程的 wp7 应用程序: 1. 时间计划 2. 按计划时间播放不同的声音样本(同一时间可能有几个样本)。

如何用 unity3d 引擎重复这个逻辑?是否可以?

4

3 回答 3

4

Unity 不允许您从除主线程之外的任何线程访问其 API;您不能使用锁定原语来解决它。

不过,您可以使用标准 .NET 线程 API 来启动不直接与 Unity API 交互的线程。您可以在额外的线程上计算样本和缓冲区,但您的主线程必须调用 AudioClip.SetData 才能将计算的样本提交给 Unity。

请注意,自 Unity 2018.1 以来,引入了作业系统,它允许在后台线程上执行某些类型的计算任务(例如,设置变换位置)。随着时间的推移,可以执行的任务正在逐渐开放。

于 2012-06-10T22:13:53.270 回答
2

API 不是线程安全的这一事实并不意味着您不能将它与额外的线程安全一起使用。您只需要确保没有两个线程同时修改公共数据。您可以使用一个简单的锁定变量来确保没有人在更新样本列表时读取它。

但是,我建议使用coroutines而不是线程,因为它们使事情变得更容易。不需要线程安全,好处相似,执行顺序更清晰。

实现类似解决方案的更简单方法是更新 Update 中的示例列表,并在 LateUpdate 方法中读取它。

于 2012-06-09T22:09:45.077 回答
0

没办法=(Unity API不是线程安全的:链接

于 2012-06-09T09:38:49.980 回答