[原]Unity3D平台通用截屏方法

      yield return new  WaitForEndOfFrame();//一定先要调用这个

      Texture2D photoTex = new Texture2D (Screen.width, Screen.height, TextureFormat.RGB24, false);
        photoTex.ReadPixels(new Rect(0.0f, 0.0f, Screen.width * 1.0f, Screen.height*1.0f), 0, 0);
        photoTex.Apply();  

       以上就可以生成一张纹理图 在unity中使用

 

       byte[] bytes = photoTex.EncodeToPNG();//将图片转成2进制流

       FileStreamcache = new FileStream(PngPath, FileMode.Create); //PngPath 相应平台路径

      cache.Write(bytes,0,bytes.Length);  

        cache.Close(); 

    以上方式2进制流转成图片 存到对应目录下

   public string PngPath
    {
        get{
            string    path=null;
            if(Application.platform==RuntimePlatform.IPhonePlayer)
            {
                path= Application.dataPath.Substring (0, Application.dataPath.Length - 5);
                path = path.Substring(0, path.LastIndexOf('/'))+"/Documents/";  
                
            }
            else if(Application.platform==RuntimePlatform.Android)
            {
                path= Application.persistentDataPath+"/";
            }
            else
            {
                path=Application.dataPath+"/Resource/GameData/";
            }
            return path;
        }         
    }

 

以上方式是比较好的一种截屏方式,避免www类的使用 如果要在其他平台使用 可以PluginSDK.TakePhono(bytes,bytes.Length * sizeof(byte));将2进制流传过去,利用相应api转成图片格式

OC中

    void _TakePhono( void * data ,int ilength){
            NSData *sData = [NSData dataWithBytes:data length:ilength];
            UIImage * image = [UIImage imageWithData:sData];
            UIImageWriteToSavedPhotosAlbum(image,nil,nil,nil); 
        }

补充说明:以上方法 使用unity3.56 可以解决ios6截屏问题。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值