(干货)Unity保存图片到手机相册并刷新相册(Android和IOS都有哦)

@这周末的时候帮同事做个东西,就是要保存图片到手机相册并且实现双端的,我一听一脸懵逼,我一个半路出家的Unity3D和CocosCreater 程序员不懂原生啊!没办法答应了就要做到。回到正题,下面直接出代码:(注:我这边是直接保存Image的内容,要是截图可能要你们自己实现啊)
(干货)Unity保存图片到手机相册并刷新相册(Android和IOS都有哦)_第1张图片这个是目录层级,Plugins/Android/classes,这个是C#调用安卓的刷新相册的方法
IOS文件夹里面的两个文件分别是:.h和.mm文件,这个是调用OC的方法
首先简单的搭个界面,如下
(干货)Unity保存图片到手机相册并刷新相册(Android和IOS都有哦)_第2张图片
然后创建一个类 SaveImage.cs,内容如下:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;

public class SaveImage : MonoBehaviour
{
public Image shareImage;
private byte[] shareTex;
// Start is called before the first frame update
void Start()
{
shareTex = shareImage.sprite.texture.EncodeToPNG();
}

[DllImport("__Internal")]
private static extern void _iosSaveImageToPhotosAlbum(string readAddr);


public void SaveSharePicture()
{
    string destination = "/sdcard/DCIM/";
    //判断目录是否存在,不存在则会创建目录
    if (!Directory.Exists(destination))
    {
        Directory.CreateDirectory(destination);
    }
    string path = destination + "/" + "xxylShare.PNG";
    //存图片
    System.IO.File.WriteAllBytes(path, shareTex);
    Debug.Log("安卓");

#if UNITY_ANDROID
var androidObject = new AndroidJavaObject(“com.xxyl.BitmapTools”);
var activity = new AndroidJavaClass(“com.unity3d.player.UnityPlayer”).GetStatic(“currentActivity”);
androidObject.Call(“refreshMedia”, activity, path);
#elif UNITY_IPHONE
path = Application.persistentDataPath + “/” + “xxylShare.PNG”;
_iosSaveImageToPhotosAlbum(path)
#endif
}
}

按钮绑定事件 SaveSharePicture,到这里基本上已经结束,如果直接测试的话会报错的(如果不是保存图片内容的话请忽略),如下:
(干货)Unity保存图片到手机相册并刷新相册(Android和IOS都有哦)_第3张图片
这个错的意思就是说这个texture 是不可读取,这个是后需要你找到这个图片,在Inspector 上勾选Read/Write Enabled,如下:

(干货)Unity保存图片到手机相册并刷新相册(Android和IOS都有哦)_第4张图片
等等 如果是安卓的话你需要把sdcard的权限打开,为什么是安卓的SdCard的权限呢,因为我们设置的保存位置是SdCard,在构建时,在playersetting/othersetting,如下:
(干货)Unity保存图片到手机相册并刷新相册(Android和IOS都有哦)_第5张图片
写入权限设置为:External(SDCard)即可打包测试了。
这里说一些IOS的问题,在代码里面可以看到IOS的保存位置和Android是不一样的,IOS直接保存的可读写的路径而不是sdCard(原谅我不懂IOS开发,不知道怎么改),原因是IOS打包后,测试发现IOS在sdCard是没有权限的,后来想起了可读写文件夹,就试了一些,结果成功了。
最后教程结束,demo还在审核,需要的直接去我的资源区下载

你可能感兴趣的:(游戏开发采坑)