Unity项目接入应用宝SDK实现截图功能

Unity项目接入应用宝SDK实现截图功能


问题由来

  • 点击应用宝悬浮窗

  • 如图所示 左下角有一个截图按钮

需要解决那些问题

  • 截图信息需要由游戏引擎提供

  • SDK获取截图信息为同步 但是Unity引擎没有提供同步接口

  • 如何防止测试同学和智障不停的点击截图按钮

点击截图按钮程序流程

  • SDK调用caputureImage方法获取截图信息

  • 在caputureImage方法中通知Unity截图

  • 在caputureImage方法中等待截图信息

  • Unity截图完成后发送给安卓层

  • 返回数据给SDK

  • 实现一个缓存5秒截图信息功能

unity代码

  • 安卓层通知Unity截图接口
public void CaputureImage()
{
    StartCoroutine(Caputure());
}
  • Unity获取截图信息返回给安卓层
IEnumerator Caputure()
{
	//等待当前帧渲染完成
    yield return new WaitForEndOfFrame();

    // 先创建一个的空纹理,大小可根据实现需要来设置
    Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);

    // 读取屏幕像素信息并存储为纹理数据,
    screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    screenShot.Apply();

    // 然后将这些纹理数据,成一个png图片文件
    byte[] bytes = screenShot.EncodeToPNG();

	//把数据返回给安卓层
    using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("SendScreenshotData", bytes);
    }
}

Android代码

  • 定义Bitmap变量
  • 定义Timer定时
Bitmap bitmap = null;
Timer timer = null;
  • 接受Unity发送过来的截图信息并转换为Bitmap类型
public void SendScreenshotData(byte[] bytes)
{
    bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
  • SDK截图回调
// 游戏助手内截屏分享功能
YSDKApi.setScreenCapturer(new IScreenImageCapturer() {
	@Override
	public Bitmap caputureImage() {
		
		//如果没有缓存则通知Unity截图
		if (bitmap == null) {

			UnityPlayer.UnitySendMessage("Directional Light", "CaputureImage", "");
		}

	    //强行延迟等待截图数据
		while (bitmap == null) {

			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		//开始一个5秒定时器
		if (timer == null) {

			timer = new Timer();

			timer.schedule(new TimerTask() {
				@Override
				public void run() {
					
					//删除缓存和定时器
					bitmap = null;

					timer = null;
				}
			}, 5000);
		}

		return bitmap;

	}
});

如果你有更好的思路和解决方法,也请多多指教

原文地址:https://www.cnblogs.com/zouqiang/p/10241378.html