如何在运行时将图像从 Android 设备的图库映射到 Unity 应用程序中的纹理?

How to map images at runtime from an Android device's Gallery to Textures in Unity app?

我在 Unity 中构建了一个 Android 应用程序,我试图在其中迭代并显示存储在用户 android 设备中的 N 个图像。我的想法是将它们的图像读入纹理并将它们映射到我的 Unity 场景中的四边形上。

为了简化问题,我只是试图获取一个文件,我知道该文件 100% 存在于我设备的照片库中的以下目录“/storage/emulated/0/DCIM/Camera/”:

 string path = "/storage/emulated/0/DCIM/Camera/20161019_142127.jpg";
 WWW www = new WWW("file://" + path);
 yield return www;

 if (string.IsNullOrEmpty(www.error))            
 {
     m_material.mainTexture = www.texture;
     Debug.Log("No Error, texture successfully set");
 }
 else
 {
     Debug.Log("Error returned = " + www.error);
 }

但我不断收到以下错误信息,提示加载文件失败:

Error returned = java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[])' on a null object reference

有人能帮我理解如何正确访问这个文件,然后在这样的目录中迭代 N 个图像文件吗?

提前致谢!

或许您可以尝试使用 System.IO 中的 File.ReadAllBytes:

Texture2D texture = new Texture2D(2, 2, TextureFormat.ARGB32, false);
byte[] fileByteData = File.ReadAllBytes(path);
texture.LoadImage(fileByteData);

纹理会在调用时自动调整大小LoadImage