在Unity3D中创建后台线程

3

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

如何在Unity3D引擎中重复这个逻辑?是否有可能?

3个回答

5

Unity不允许您从非主线程访问其API;您不能使用锁定原语来解决此问题。

但是,您可以使用标准的.NET线程API启动不直接与Unity API交互的线程。例如,您可以在另一个线程中计算样本和缓冲区,但主线程必须调用AudioClip.SetData将计算出的样本提交给Unity。

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


2
API不是线程安全的事实并不意味着您不能在额外的线程安全性下使用它。您只需要确保没有两个线程同时修改公共数据。您可以使用一个简单的锁变量来确保在更新样本列表时没有人读取它。
然而,我建议使用 协程而不是线程,因为它们使事情变得更容易。不需要线程安全性,好处类似,执行顺序更清晰。
实现类似解决方案的更简单方法是在Update中更新样本列表,并在LateUpdate方法中读取它。

@StaffordWilliams 已更新链接。谢谢! - Elideb

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接