unity安卓的IO,对于可读写、只读等功能都做了很多很严苛的限制。
读写路径先不考虑安卓原生APK,此文暂时只说unity下的两种具有象征性的操作路径:
//以下是unity只读目录,在Asset下新建一个文件夹,将其命名为StreamingAssets, //然后可以对其进行只读加载。 string path = Application.streamingAssetsPath + "//" + "文件名.后缀名"; //以下是Unity可读可写目录,打开安卓手机存储,根目录下找到Android/data/, //在data里面全部对应的是APK的包名, //Application.streamingAssetsPath就是对应的当前APK的包名目录, //当使用存储的时候,该目录下会自动生成一个file文件夹, //此file文件夹的目录就是当前获取的目录,可读可写,当APK卸除的时候,会自动删除, //当APK重装的时候,不会删除。 string path = Application.persistentDataPath+ "//" + "文件名.后缀名";
另外,这两个目录只能在主线程下去调用。
如果在异步下载里用到该目录,当用消息者模式进行回发的时候,执行的回调并不在主线程里,如果需要对应操作GameObject,则会出现报错行为,如果要做异步下载,请在非mono类里面增加Queue<T>的队列管理,并将回发事件写入队列,由mono的Update对队列进行监听。
这样每次下载完成,下载的异步线程就会把消息写入Queue的队列,此时Update一直在监听队列的数量,当数量大于0的时候,每一次update都会对队列进行一次Dequeue(),每一次Dequeue的时候,都会从主线程发送一条消息去执行,消息的回调当调到 GameObejct的时候也不会出现报错。
下一篇预告:Unity使用Http进行同步和异步下载。