一、功能描述:
做一个获取游戏内容分享图片功能,分截图和长图分享。图片上要显示玩家自定义的头像 以及名字。
二、实现思路:
1、分享直接使用的share SDK 即可。
2、从服务器下载背景模板图片。
3、将玩家名字显示截图 生成图片。
4、下载读取头像图片
5、将名字图片和头像图标分别合并到背景模板图片。
6、保存图片到本地
三、代码实现:
1、下载图片代码
下载相关参考了一个大神的代码做了修饰。原地址点击查看
using System;
using System.IO;
using UnityEngine;
public abstract class DownloadItem {
/// <summary>
/// 网络资源url路径
/// </summary>
protected string m_srcUrl;
/// <summary>
/// 资源下载存放路径,不包含文件名
/// </summary>
protected string m_savePath;
/// <summary>
/// 文件名,不包含后缀
/// </summary>
protected string m_fileNameWithoutExt;
/// <summary>
/// 文件后缀
/// </summary>
protected string m_fileExt;
/// <summary>
/// 下载文件全路径,路径+文件名+后缀
/// </summary>
protected string m_saveFilePath;
/// <summary>
/// 原文件大小
/// </summary>
protected long m_fileLength;
/// <summary>
/// 当前下载好了的大小
/// </summary>
protected long m_currentLength;
/// <summary>
/// 是否开始下载
/// </summary>
protected bool m_isStartDownload;
public bool isStartDownload {
get {
return m_isStartDownload;
}
}
public DownloadItem(string url, string path) {
m_srcUrl = url;
m_savePath = path;
m_isStartDownload = false;
m_fileNameWithoutExt = Path.GetFileNameWithoutExtension(m_srcUrl);
m_fileExt = Path.GetExtension(m_srcUrl);
m_saveFilePath = m_savePath;//string.Format("{0}/{1}{2}", m_savePath, m_fileNameWithoutExt, m_fileExt);
}
/// <summary>
/// 开始下载
/// </summary>
/// <param name="callback">下载完成回调</param>
public virtual void StartDownload(MonoBehaviour behaviour,Action failedDelegate, Action completedDelegate = null,bool isImage = false) {
if (string.IsNullOrEmpty(m_srcUrl) || string.IsNullOrEmpty(m_savePath)) {
return;
}
if (behaviour == null)
return;
//若存放目录不存在则创建目录
//if (!string.IsNullOrEmpty(m_saveFilePath)) {
// string dirName = Path.GetDirectoryName(m_saveFilePath);
// if (!Directory.Exists(dirName)) {
// Directory.CreateDirectory(dirName);
// }
//}
}
/// <summary>
/// 获取下载进度
/// </summary>
/// <returns>进度,0-1</returns>
public abstract float GetProcess();
/// <summary>
/// 获取当前下载了的文件大小
/// </summary>
/// <returns>当前文件大小</returns>
public abstract long GetCurrentLength();
/// <summary>
/// 获取要下载的文件大小
/// </summary>
/// <returns>文件大小</returns>
public abstract long GetLength();
public abstract void Destroy();
}
using System;
using System.Collections;
using System.IO;
using System.Net;
using UnityEngine;
/// <summary>
/// HTTP的方式下载,支持断点续传
/// </summary>
public class HttpDownloadItem : DownloadItem {
/// <summary>
/// 临时文件后缀名
/// </summary>
string m_tempFileExt = ".temp";
/// <summary>
/// 临时文件全路径
/// </summary>
string m_tempSaveFilePath;
public HttpDownloadItem<