分享是游戏推广的的重要基石之一,它在游戏传播中扮演着重要的角色。分享的意义包含了许多方面,其中最重要的是促进用户彼此沟通和交流,同时对游戏方可以增加游戏的用户规模,增加用户粘度。
这里就先分享一下我自己开发的个小游戏(方便的话,点进去体验一下,拜托了):
之前笔者也进行了“Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现”的整理,需要的可以先移步查看。
截图分享给好友的功能,能直观分享展示游戏内的画面,是比较常用的方式,虽然Unity3d也可以截图,但是主体还是微信这边的分享,所以还是要用微信提供的接口(Canvas.toTempFilePath(Object object)或者Canvas.toTempFilePathSync(Object object))实现,具体实现在下文进行讲述,还有一定的限制进行说明。
这里以大厅的分享按钮进行截图分享为例进行讲解,即大厅中放置一个分享的按钮UI,点击后对大厅的场景进行截图,然后分享。大厅场景如下:
这里我们想截取场景中的,车辆附近的位置来分享:
这里的位置需要控制如下参数来实现范围的:
x = 0,
y = 0,
width = 375,
height = 300,
destWidth = 375,
destHeight = 300,
x是截取 canvas 的左上角横坐标(就是截图的起始x坐标);
y是截取 canvas 的左上角纵坐标(就是截图的起始y坐标);
width 截取 canvas 的宽度;
height截取 canvas 的高度;
destWidth 目标文件的宽度,会将截取的部分拉伸或压缩至该数值;
destHeight 目标文件的高度,会将截取的部分拉伸或压缩至该数值。
这里有个坑点就是,我之前采用WX.GetSystemInfoSync(); 的方式进行获取屏幕宽度和高度,就行换算获取的信息在手机和开发工具上都不太对,大家也可以自行测试一下:
var sys= WX.GetSystemInfoSync();
Debug.Log("screenWidth:" + sys.screenWidth);
Debug.Log("screenHeight:" + sys.screenHeight);
Debug.Log("windowWidth:" + sys.windowWidth);
Debug.Log("windowHeight:" + sys.windowHeight);
而我采用的是Unity的屏幕信息:
Debug.Log("UnityEngine.Screen.width;" + UnityEngine.Screen.width);
Debug.Log("UnityEngine.Screen.height;" + UnityEngine.Screen.height);
所以要将截图长宽基本一致,我这里按上下中间占比1/3的进行截图:
int ShareHeight = UnityEngine.Screen.height / 3;
WXCanvas.ToTempFilePath(new WXToTempFilePathParam()
{
x = (Screen.width-ShareHeight) / 2,
y = ShareHeight,
width = ShareHeight,
height = ShareHeight,
destWidth = ShareHeight,
destHeight = ShareHeight,
success = (result) =>
{
Debug.Log("ToTempFilePath success" + JsonUtility.ToJson(result));
WX.ShareAppMessage(new ShareAppMessageOption()
{
title = "这是你的标题",
imageUrl = result.tempFilePath,
});
},
fail = (result) =>
{
Debug.Log("ToTempFilePath fail" + JsonUtility.ToJson(result));
},
complete = (result) =>
{
Debug.Log("ToTempFilePath complete" + JsonUtility.ToJson(result));
},
});
按官方的文档你也可以采用如下同步方式进行(笔者未验证):
int ShareHeight = UnityEngine.Screen.height / 3;
var tf = WXCanvas.ToTempFilePathSync(new WXToTempFilePathParam()
{
x = (Screen.width - ShareHeight) / 2,
y = ShareHeight,
width = ShareHeight,
height = ShareHeight,
destWidth = ShareHeight,
destHeight = ShareHeight,
});
WX.ShareAppMessage(new ShareAppMessageOption()
{
title = "这是你的标题",
imageUrl = tf,
});
其它参数:
fileType 目标文件的类型有两种jpg和png,默认png。
quality jpg图片的质量,仅当 fileType 为 jpg 时有效。取值范围为 0.0(最低)- 1.0(最高),不含 0。不在范围内时当作 1.0。
特别注意的是这个截取的图只是个临时文件,也就是将当前截图设定的画布(Canvas) 保存为一个临时文件。
如果使用了开放数据域,则生成后的文件仅能被用于以下接口:
wx.saveImageToPhotosAlbum、
wx.shareAppMessage、
wx.onShareAppMessage、
wx.previewImage、
wx.previewMedia、
wx.onShareTimeline、
wx.showShareImageMenu