背景
公司现在已经已经使用npm处理公司框架很长一段时间了,中途有各种意外;这里就简单记述一下其中的一个问题!
packagemanager本地缓存错误,而unity提供的reflesh却无法生效的bug
技术点
unity的package通常都会缓存到本地,官方的说明总结了一下大致是以下原因:
- 为了能共享
- 为了能在离线的时候也能使用
unity还提供了UPM_NPM_CACHE_PATH 和UPM_CACHE_PATH 给开发者自定义缓存的路径
upm的update指令经过我的测试,貌似并不能对已经cache的package进行再次更新(也许是我的水平不够,如果有,欢迎指出!)unity官方说使用他们的RunUnityPackageManagerDiagnostics.bat可以测试看情况,但是我本地运行的时候一直是报错!
<path-to-unity-installation-folder>
\Unity
\Data
\Resources
\PackageManager
\Diagnostics
\RunUnityPackageManagerDiagnostics.bat
下面是我使用的npm指令(在unity安装目录中``)
./npm --registry=自定义的npmLink search com.XXX.XXX
./npm --registry=自定义的npmLink install com.XXX.XXX
./npm list
删除download下来的某些文件
./npm --registry=自定义的npmLink update com.XXX.XXX
以下是unity 缓存package的目录
| Operating system | Default root directory |
|---|---|
| Windows (non-system user account) | %LOCALAPPDATA%\Unity\cache |
| Windows (system user account) | %ALLUSERSPROFILE%\Unity\cache |
| macOS | $HOME/Library/Unity/cache |
| Linux | $HOME/.config/unity3d/cache |
如果有在运行unity时,package的报错reload一直无效,就可以去到package的缓存目录清理一下指定的pacakge(全部清理需要花费的时间比较大);
经过UnityEditor.dll的逆向,看到unity提供了一个IUpmClient的类型,它就包含了一个clearCache的方法(目前没有看到有refresh的方法)。
目前可行的方法有以下一个:
- 使用脚本清理
package的缓存目录!
正在测试的方法,通过反射的方式获取IUpmClient的单例,然后执行clearCache方法(看了一下方法,貌似是直接清理了全部的!)
PREVIOUSopengl基础学习(6)
NEXTopengl基础学习(7)