前言
这几天在查一个unity中inputsystem这个输入控件在有的手机端上出现ui的输入不响应,为了查找这个问题,我开始研究该怎么在package包内的文件输出一些关键日志,毕竟在手机端不太方便断点调试。在打印中我发现了两条路线,一个是用反射,这个是我最开始的方案,机缘巧合让我发现了可以把package包使用本地的文件打包进移动端。现在我就基于这两个方案讲讲我遇到的坑
正文
反射
因为我是为了获取到封装好的类中的一些数据,所以我所讲的只是我用到的一些功能,其他关于特性,动态赋值这些功能我应该不会讲。
当我们拿到一个对象,我们一开始想通过getType来获取它的类型,通过获取到的类型我们就可以通过它的实例来获取到它的一些属性值,比如我们想获取到变量的值,我们就可以通过type.GetFields(变量名).GetValue(实例)就能获取到变量的在当前这个实例中的数据。其他的什么属性呀,方法呀,都能这样获取到。
如果我们获取一个数组就有点麻烦了,首先我们得先判断这个对象是不是一个数组类型,如果是数组类型,我们就可以把这个对象转成迭代器(IEnumerable)这个迭代器是基础迭代器,它内部是object这个类型的,然后继续获取属性,获取对象,这样一点点的拿到我们想知道的数据。
在获取属性的时候记得要传入这个属性的类型,比如instance(实例化的),Public(公共),NonPublic(非公共)。
本地Package包
一个没有修改过的package包可以看到在他的说明左下角有个Develop这个选项,在我看来这个选项就是代表你可以把这个package包自定义开发。可以做成自己的自定义(可能会有些包不支持)。当我们选中了这个选项之后
这个包的位置就换到了Custom本地package了,它就被下载下来了,放到的路径在我们的Package路径下同名的文件夹下,然后我们重新加载我们的工程,就可以发现脚本的路径已经换掉了,还没有本地化之前的包是在Library/packageCache这里的。
然后我们去看Packages路径下的Packages-lock.json文件夹就会发现上面这样的修改。
结束语
我们在日常工作中经常会遇到需要去调试源码的情况,但是在手机端这种调试很麻烦,所以我们只能通过打印log去验证我们一些想法。调试麻烦不是说不能调试,我之前就在xcode上调试过unity工程,太麻烦了。