在 Unity 中实现 Span<T>

Posted

技术标签:

【中文标题】在 Unity 中实现 Span<T>【英文标题】:Implement Span<T> in Unity 【发布时间】:2019-07-04 09:52:07 【问题描述】:

我正在尝试在 Unity 中使用 Span。

我知道 System.Memory 尚不支持,但我还是想实现它。

我直接从NuGet下载了库。我从nuget包中的netstandard2.0文件夹中得到System.Memory.dll并将其拖到项目Assets/Scripts文件夹中。

但我收到此错误,我无法在我的 IDE (Rider) 中使用它。

程序集“Assets/System.Memory.dll”将不会被加载,因为 到错误:无法解析参考 'System.Runtime.CompilerServices.Unsafe'。装配是否丢失或 与当前平台不兼容?

我的问题是:如何在 Unity 中使用 Span?


Unity 版本:Unity 2019.1.7f。操作系统:Windows

【问题讨论】:

正如错误所说,您缺少System.Runtime.CompilerServices.Unsafe。查看“依赖项”选项卡on NuGet 以了解它需要哪些依赖项。您还需要检查所有依赖项的依赖项。可能更容易关注***.com/a/53458099/1086121 为什么是-1?经过几个小时的搜索,我在这里提出了我的问题,然后在其他几个小时后我找到了答案(我注意到这个答案在 Unity 论坛的多个地方被问到,所以这不仅仅是我的问题)。这里的答案可能为我节省了第二部分搜索的时间。这有什么问题吗? 【参考方案1】:

Nuget may generate issues in Unity.

解决办法是直接下载dll。

    从direct download 获取库 => 下载包

    将 lib/netstandartd2.0 文件夹中的 System.Memory.dll 导入项目窗口

    在项目窗口中选择System.Memory.dll,然后禁用“验证引用”

我从unity forum 获取信息并应用于我的情况。 (在论坛中他们使用 Unity Packages,而我只是在 Assets 上设置库)

【讨论】:

谢谢你。从那时起,您在使用 Spans 时遇到过任何问题吗? 我在 Windows 服务器上将它用于 unity 2019.1.something,它可以正常工作几个月。从未在移动或其他应用程序上尝试过。有时统一因未知原因崩溃,但我将其与 Enet C# Wrapper 库相关(不能完全确定)。【参考方案2】:

我遇到了同样的问题。

通过下载missing package解决了

并将lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll 复制到我的游戏资源文件夹中。

【讨论】:

以上是关于在 Unity 中实现 Span<T>的主要内容,如果未能解决你的问题,请参考以下文章

在Unity中实现动画的正反播放代码

Unity中实现列表中元素随机排序

Unity中实现列表中元素随机排序

在 Delphi 中实现 List Enumerator OfType<T>

在图像滑块中实现导航

Unity中实现可变形的Image