Unity导出安卓项目导入Android Studio后无法保存数据的解决方法
Unity导出Android Studio项目后无法保存数据的原因及解决办法
常见原因
- 存储权限未正确配置:Android 6.0(API 23)及以上需动态申请读写权限,Unity导出到AS后可能丢失权限声明或未处理动态申请逻辑。
- 存储路径不符合安卓权限规则:Android 10+启用Scoped Storage,直接写入外部根目录等受限路径会被拦截。
- AndroidManifest.xml配置缺失:导出后的AS项目中,Manifest文件可能丢失必要权限声明或适配属性。
- 代码逻辑错误:Unity保存代码的路径写错、未捕获IO异常,导致保存失败无提示。
解决办法
1. 配置存储权限
静态权限声明(修改AndroidManifest.xml)
在AS项目的AndroidManifest.xml中添加权限:
<!-- Android 10及以下读写权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- Android 11+如需访问公共目录,可添加该权限(需用户手动授权) --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
若targetSdkVersion≥30,需在<application>标签内添加兼容属性:
android:requestLegacyExternalStorage="true"
该属性可暂时绕过Scoped Storage限制,适配旧代码。
动态申请权限(Unity端补充)
在Unity脚本中添加权限申请逻辑,确保启动时向用户请求权限:
using UnityEngine; using UnityEngine.Android; public class PermissionChecker : MonoBehaviour { void Start() { RequestStoragePermissions(); } void RequestStoragePermissions() { if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite)) { Permission.RequestUserPermission(Permission.ExternalStorageWrite); } if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead)) { Permission.RequestUserPermission(Permission.ExternalStorageRead); } } }
将该脚本挂载到场景的常驻GameObject上即可。
2. 使用Unity推荐的安全存储路径
避免使用外部根目录,改用Application.persistentDataPath,该路径对应安卓的/Android/data/[你的包名]/files,无需额外权限即可读写(Android 10+也兼容):
using System.IO; using UnityEngine; public class DataSaver : MonoBehaviour { public void SaveGameData(string dataContent) { string savePath = Path.Combine(Application.persistentDataPath, "game_save.dat"); try { File.WriteAllText(savePath, dataContent); Debug.Log("数据保存成功,路径:" + savePath); } catch (System.Exception e) { Debug.LogError("保存失败:" + e.Message); } } }
3. 调整AS项目的targetSdkVersion
若暂时不想适配Scoped Storage,可将AS项目的targetSdkVersion降至30以下,配合requestLegacyExternalStorage="true"使用,能快速解决权限拦截问题。
4. 排查代码错误
- 给保存逻辑添加异常捕获,打印详细错误信息,定位问题;
- 查看AS的Logcat日志,过滤应用包名或Unity关键词,找到权限拒绝、路径不存在等具体报错。
内容的提问来源于stack exchange,提问作者Ali Ahmed
相关产品推荐
相关产品推荐

