如果NuGetForUnity网络访问不了或者下载速度非常慢,导致无法正常使用,那可以试试下面的方法。
1) 先用vs的NuGet包管理器下载,vs下貌似没遇到网络问题,下载很快
注意,vs不是下载在Unity的Assets文件夹下的,而是和他同层级,所以此时Unity并不会加载所下载的dll文件的
2) 然后我们copy对应版本的dll文件到Unity的Assets文件夹下
菜单 -> File -> Build Settings -> Player Settings下查看用哪个版本
这边我们copy netstandard2.0版本的dll,因为Editor和逻辑代码都会用到,所以放在Assets/Packages下。如果只有Editor会用到,那可以放在Assets/Editor/Packages
3) 一个同步脚本,Assets下存在的dll文件如何和vs下载的dll文件的最后修改时间不一致,就会从vs下载的那边copy过来替换掉。
#if UNITY_EDITORusing System.IO; using UnityEditor; using UnityEngine;public class NuPkg {const string MenuItemPath_SyncExistDlls = "NuGet/Sync Dlls";[MenuItem(MenuItemPath_SyncExistDlls)]private static void MenuItem_SyncExistDlls(){SyncDlls("Assets/Packages/");SyncDlls("Assets/Editor/Packages/");Debug.Log("finish !!!"); }private static void SyncDlls(string dirPath){var dirFullPath = Path.GetFullPath(dirPath);if (!Directory.Exists(dirPath)) return;Debug.Log($"{dirFullPath}");var libNameFolders = Directory.GetDirectories(dirPath);foreach (var libNameFolder in libNameFolders){//Debug.Log($"{libNameFolder}");var dllFilePaths = Directory.GetFiles(libNameFolder, "*.dll", SearchOption.AllDirectories);foreach (var filePath in dllFilePaths){var index = filePath.IndexOf("/Packages/");if (index < 0){Debug.Log($"invalid path: {filePath}");continue;}var dllFilePathVsNuGet = filePath.Substring(index + 1);if (File.Exists(dllFilePathVsNuGet)){if (File.GetLastWriteTime(filePath) == File.GetLastWriteTime(dllFilePathVsNuGet)){Debug.Log($"no change: {dllFilePathVsNuGet}");}else{File.Delete(filePath);File.Copy(dllFilePathVsNuGet, filePath);Debug.Log($"updated: {dllFilePathVsNuGet}");}}}}}}#endif
参考
在 Unity 中使用 .NET 4 和更高版本 | Microsoft Learn
Unity .NET 4.x 相关知识-CSDN博客