Flutter:非资源本地图片的路径访问方案问询
在Flutter中提供可被Unity直接访问的图片路径
针对你嵌入Unity后需要传递可直接访问的图片路径的场景,以下是几种可靠的解决方案:
跨平台通用方案:将Flutter Assets图片复制到可访问路径
这是最省心的跨平台实现方式,步骤如下:
- 先在
pubspec.yaml中正常声明你的图片资源:
flutter: assets: - assets/images/your_target_image.png
- 借助
path_provider包把Assets里的图片复制到应用私有文件目录(该目录拥有可直接读取的绝对路径),代码示例:
import 'package:path_provider/path_provider.dart'; import 'package:flutter/services.dart'; import 'dart:io'; Future<String> getUnityAccessibleImagePath() async { final docDir = await getApplicationDocumentsDirectory(); final targetFilePath = '${docDir.path}/your_target_image.png'; final targetFile = File(targetFilePath); // 仅当目标文件不存在时执行复制,避免重复操作 if (!await targetFile.exists()) { final assetBytes = await rootBundle.load('assets/images/your_target_image.png'); await targetFile.writeAsBytes( assetBytes.buffer.asUint8List( assetBytes.offsetInBytes, assetBytes.lengthInBytes ) ); } return targetFilePath; }
- 调用上述方法拿到路径后,通过你已有的Flutter-Unity通信通道将路径传递给Unity即可。
原生平台单独配置方案
Android端
- 将图片放入Android项目的
app/src/main/assets目录(若不存在该目录则自行创建) - 可沿用上述跨平台的复制逻辑,也可以通过原生代码直接读取Assets文件并写入可访问目录,再将路径回传给Flutter后转发给Unity。
iOS端
- 在Xcode中将图片添加到项目的
Resources目录(添加时勾选"Copy items if needed"选项) - 后续同样通过复制到Documents目录的方式获取可被Unity读取的绝对路径。
权限注意事项
- Android:若使用应用私有目录(如Documents),无需额外权限;若涉及外部存储,则需申请
READ_EXTERNAL_STORAGE权限。 - iOS:访问应用私有目录无需额外权限,若涉及外部存储,需在
Info.plist中添加对应的权限描述字段。
内容的提问来源于stack exchange,提问作者Wouter Vandenputte
相关产品推荐
相关产品推荐

