我正在尝试在Unity 5.6.1中更新并构建一个C#项目,以便稍后在Hololens上运行。最初,该项目使用了System.Threading,但我认为我需要使用Tasks,因为Unity存在一些问题。
当我在Visual Studio中打开项目时,它使用Tasks运行正常。当我在Unity中构建项目时,它表示任务不存在(下面的错误)。我在Universal 10 SDK的Unity中使用.Net 4.6构建。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace SampleCSApp
{
// Based on http://answers.unity3d.com/questions/357033/unity3d-and-c-coroutines-vs-threading.html
class BaseThread
{
private bool _isDone = false;
private object _handle = new object();
//private System.Threading.Thread _thread = null;
private System.Threading.Tasks.Task _thread = null;
private static int WAIT_FOR_MS = 100;
public bool IsDone
{
get
{
bool tmp;
lock (_handle)
{
tmp = _isDone;
}
return tmp;
}
set
{
lock (_handle)
{
_isDone = value;
}
}
}
public virtual void Start()
{
_thread = new System.Threading.Tasks.Task(Run);
//_thread = new System.Threading.Thread(Run);
_thread.Start();
}
public virtual void Abort()
{
_thread.Dispose();
//_thread.Abort();
}
protected virtual void ThreadFunction() { }
public void WaitFor()
{
while (!IsDone)
{
_thread.Wait(WAIT_FOR_MS);
//System.Threading.Thread.Sleep(WAIT_FOR_MS);
}
}
private void Run()
{
ThreadFunction();
}
}
}
给出Unity错误:
Assets / SampleCSApp / BaseThread.cs(14,34):错误CS0234:名称空间“System.Threading”中不存在类型或命名空间名称“Tasks”。你错过了装配参考吗?
答案 0 :(得分:3)
Unity基于.NET 2.0,引入了一些.NET 3.5功能。任务是.NET 4.0的一项功能。您需要等待Unity 2017.1发布(或使用the beta version),它将通过选择加入选项支持.NET 4.6。有关详细信息,请参阅this forum post。
我们想让论坛上的每个人都知道我们未来的计划 单声道运行时升级。
Unity 2017.1版本很快将作为公开测试版提供。在 在此版本中,Mono运行时升级功能将是一个选项。对于 在给定项目中,您可以选择使用现有版本的Mono Unity(支持.NET 3.5)或新的Mono运行时(使用.NET 4.6 支持)。在Unity 2017.1中,默认设置是使用旧版本 Mono的版本。很快(也许是Unity的2017.2版本)我们将会制作 新的Mono运行时默认值,旧运行时作为选项。后来 仍然,我们将删除对旧运行时的支持。更多细节将 即将进入博客文章,但我们希望让所有人都参与其中 论坛首先了解。
我们非常感谢你们这么多人的时间,精力和反馈 已提供推动这一进程。我们的团队专注于 将Mono运行时升级发送给所有Unity用户而不用 破坏事物。你所做的工作,以找到许多东西 确实破裂是非常宝贵的。