我一直在努力在MonoDevelop中添加BigInteger
以允许非常大的数字,然而System.Numerics
给我带来了很多麻烦。我已经添加了.dll引用,iv 'e确保所有其他内容都被正确引用,但我仍然得到这个错误:
Assets/Scripts/Click.cs(4,14): error CS0234: The type or namespace name `Numerics' does not exist in the namespace `System'. Are you missing an assembly reference?
下面是我尝试使用Numerics的类:
using UnityEngine;
using System.Collections;
using System;
using System.Numerics;
public class Click : MonoBehaviour {
public UnityEngine.UI.Text PixelsDisplay;
public UnityEngine.UI.Text PPC;
public double pixels = 0.0;
public double ppc = 1.0;
void Update(){
PixelsDisplay.text = "Pixels: " + pixels.ToString ("#,#");
if (pixels >= 10000000) {
PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000, 2) + "M";
}
if (pixels >= 1000000000) {
PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000, 2) + "B";
}
if (pixels >= 1000000000000) {
PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000000, 2) + "T";
}
if (pixels >= 1000000000000000) {
PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000000000, 2) + "Qd";
}
if (pixels >= 1000000000000000000) {
PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000000000000, 2) + "Qt";
}
if (pixels >= BigInteger.Parse("1000000000000000000000")) {
PixelsDisplay.text = "Pixels: " + Math.Round(pixels / BigInteger.Parse("1000000000000000000000"), 2) + "Sx";
}
PPC.text = "PPC: " + ppc.ToString ("#,#");
//TODO
}
public void Clicked(){
pixels += ppc;
}
}
下面是一张图片,展示了我所有的参考资料:
我搜索过类似的问题,但给出的答案不直接处理System.Numerics,通常不使用MonoDevelop。谢谢你的帮助!
3条答案
按热度按时间mf98qq941#
System.Numerics
没有在Unity使用的Mono风格中实现。所以你不能使用这个命名空间。请记住,Unity使用的Mono是自定义的,并且部分兼容. NET 2.0。
MonoDevelop或VisualStudio将允许您添加所需的DLL,并且不会抛出任何错误,但Unity会。
兼容性列表here。
jhkqcmku2#
你可以尝试从https://github.com/Microsoft/referencesource复制你想要的类-它可能会演变成复制/修补越来越多的文件,或者它可能是相当简单的。我让Complex.cs只做了一两个修改就可以工作了。
3zwtqj6y3#
将. DLL包含到Unity中对初学者来说是一个小噩梦;主要原因是Unity比当前的C#和.Net版本落后几个版本。
如果必须包含.DLL,只要该.DLL与.DLL的所有依赖项一起被引用,并且这些依赖项的所有依赖项都被引用,就可以完成此操作。如果任何依赖项超过.Net Standard 2.1或.Net Framework 4.7(我认为),那么你最终会遇到兼容性问题。
话虽如此,这不是不可能的,它只是一个耗时的驱魔。
实现你想要的目标的步骤:
1.将System.Numerics.DLL放入项目中,确保它与.Net Standard 2.0或2.1兼容;
1.找到System.Numerics依赖项,遍历每个依赖项;
1.对于每个依赖项,请执行此列表中的步骤1-3。
假设它们都是兼容的,并且包含了所有依赖项,Unity应该能够处理.DLL,就像它本身是兼容的一样。
你可能面临的挑战是,“为什么”.DLL不兼容。如果由于版权或许可问题而将子依赖项排除在Unity之外,那么您可能会遇到法律的问题等等。
对于步骤1-3,通常可以找到NuGet上的依赖项列表。这可能不适用于所有的. DLL,但对大多数。