Unity开发移动端相机的优缺点分析
2017-02-13 15:44
141 查看
它对相机硬件不是太“了解”
用它的API,3000块钱的手机和500块钱的手机的拍照效果相差不大。造成这种差异的原因是,unity的相机方面的API,他没有获取相机参数的方式,对于相机的硬件设备,它只是单方面的要求,没有互动,它的模式是,我需要什么样的图片,那么我就要求相机返回什么样的图片给我,而不关心它是否真的能有能力返回给我。通俗的讲就是,在它看来,黄金和铁都是金属,它没法利用黄金比铁高出来的价值,而只认为它们都只是金属而已。
它没有获得相机Info相应的方法
甚至于他没法在拍照的时候在正确的时机开启闪光灯。
它的拍照原理是对当前显示texture的截图
这样造成的结果就是,如果你想让拍照拍出来的图片质量越好,那么就需要你预览的时候要求它输出的质量越好,而预览的时候输出质量好的代价,就是手机的性能,你就会发现预览界面一卡一卡的,好了,拍照的质量和预览的流畅度中间,少年,该做个了断了。:) 而如果使用AndroidAPI,则可以输出达到3120*4160分辨率的图片,unity方面API输出分辨率经测试最大值仅为1536*2048。
它的对焦方式只能是自动对焦
它的对焦方式是自动对焦,并且没法在一个时间点捕捉它的对焦状态。除非你有别的黑科技途径。
当然你可以尝试让相机同时输出到两个texture里面,一个用来预览,另外的一个专门用来拍照时play()->截取图片->存储—->拍完stop(),这样不就能解决我上面说到的问题了吗。可以预料到这样的话他在预览的时候是流畅的,而仅仅是在拍照的时候会有一个卡顿,但总会好上那么一点点吧,结果是他在拍照时候的卡顿非常之久,显然这种方式显然也是不好的。
优点,跨平台能力
unity的跨平台能力是很棒的,因此如果你用unity能开发出一个满足要求的相机,就能在多平台运行,这不管对于开发的效率还是对后期的维护成本都是十分有利的。并且它支持导出Android和IOS,开发一个这样的插件用作这两个平台是很不错的选择。
总结
总结来说就是:unity开发的相机虽然能在多个平台上面运行,但是它也被迫的放弃了一些东西,它在相机方面的API没有很好的发挥出相机的硬件优势。我推测unity 相机方面的API的初衷应该是适用于给AR开发提供轻量级的图像流,数据量小,兼容性强,跨平台,这对于普遍性能较低的移动设备是喜闻乐见的。
unity学习了还不到一个月,可能会有了解不足的地方,欢迎大家的指出,另外如果你有更好的想法,也请不吝赐教。
用它的API,3000块钱的手机和500块钱的手机的拍照效果相差不大。造成这种差异的原因是,unity的相机方面的API,他没有获取相机参数的方式,对于相机的硬件设备,它只是单方面的要求,没有互动,它的模式是,我需要什么样的图片,那么我就要求相机返回什么样的图片给我,而不关心它是否真的能有能力返回给我。通俗的讲就是,在它看来,黄金和铁都是金属,它没法利用黄金比铁高出来的价值,而只认为它们都只是金属而已。
camtexture = new WebCamTexture(cameraDevs[0].name, Screen.height, Screen.width, 60); camtexture.Play();
它没有获得相机Info相应的方法
甚至于他没法在拍照的时候在正确的时机开启闪光灯。
它的拍照原理是对当前显示texture的截图
Texture2D mTexture = new Texture2D(camtexture.width, camtexture.height, TextureFormat.RGB24, false); mTexture.SetPixels(camtexture.GetPixels(0, 0, camtexture.width, camtexture.height)); mTexture.Apply(); byte[] bt = mTexture.EncodeToJPG(100); string mPhotoName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"; string mPhotoDir = Application.persistentDataPath + "/" + "iezviewCamera" + "/"; if (!Directory.Exists(mPhotoDir)) { Directory.CreateDirectory(mPhotoDir); } string mPhotoPath = mPhotoDir+ mPhotoName; System.IO.File.WriteAllBytes(mPhotoPath, bt); Debug.Log("照片路径 " + mPhotoPath);
这样造成的结果就是,如果你想让拍照拍出来的图片质量越好,那么就需要你预览的时候要求它输出的质量越好,而预览的时候输出质量好的代价,就是手机的性能,你就会发现预览界面一卡一卡的,好了,拍照的质量和预览的流畅度中间,少年,该做个了断了。:) 而如果使用AndroidAPI,则可以输出达到3120*4160分辨率的图片,unity方面API输出分辨率经测试最大值仅为1536*2048。
它的对焦方式只能是自动对焦
它的对焦方式是自动对焦,并且没法在一个时间点捕捉它的对焦状态。除非你有别的黑科技途径。
当然你可以尝试让相机同时输出到两个texture里面,一个用来预览,另外的一个专门用来拍照时play()->截取图片->存储—->拍完stop(),这样不就能解决我上面说到的问题了吗。可以预料到这样的话他在预览的时候是流畅的,而仅仅是在拍照的时候会有一个卡顿,但总会好上那么一点点吧,结果是他在拍照时候的卡顿非常之久,显然这种方式显然也是不好的。
优点,跨平台能力
unity的跨平台能力是很棒的,因此如果你用unity能开发出一个满足要求的相机,就能在多平台运行,这不管对于开发的效率还是对后期的维护成本都是十分有利的。并且它支持导出Android和IOS,开发一个这样的插件用作这两个平台是很不错的选择。
总结
总结来说就是:unity开发的相机虽然能在多个平台上面运行,但是它也被迫的放弃了一些东西,它在相机方面的API没有很好的发挥出相机的硬件优势。我推测unity 相机方面的API的初衷应该是适用于给AR开发提供轻量级的图像流,数据量小,兼容性强,跨平台,这对于普遍性能较低的移动设备是喜闻乐见的。
unity学习了还不到一个月,可能会有了解不足的地方,欢迎大家的指出,另外如果你有更好的想法,也请不吝赐教。
“大圣,此去欲何?” “踏南天,碎凌霄。” “若一去不回……” “便一去不回”
相关文章推荐
- 基于Html5的移动端(APP)开发框架的优缺点
- WebApp 开发框架推荐以及优缺点分析
- Unity Steam_VR开发工具插件---VRTK 自带案例分析
- 移动端应用的推广分析模型--苦B开发必看
- WebRTC原生开发和混合开发优缺点分析对比
- unity 游戏开发过程中需要注意和后期优化的重点方向和难点分析(大白话理论篇)
- APP创业者必知的H5、微信开发、APP优缺点分析
- 写给VR手游开发小白的教程:(四)补充篇,详细介绍Unity中相机的投影矩阵
- 移动端开发-数据分析
- WebRTC原生开发和混合开发优缺点分析对比
- Unity Steam_VR开发工具插件---VRTK 自带案例分析
- webapp开发框架推荐以及优缺点分析【webAPP干货】
- HoloLens开发手记 - Unity之Locatable camera 使用相机
- Unity SteamVR插件详解一:SteamVR_Controller脚本分析+Vive控制器功能开发
- HoloLens开发手记 - Unity之Locatable camera 使用相机
- 【Unity】 WebGL开发中的内存分配问题(分析Unity堆数据)
- HoloLens开发手记 - Unity之Locatable camera 使用相机 Enabling the capability for Photo Video Camera 启用相机能力
- Unity社交功能开发——移动端输入法回车事件响应
- Unity Steam_VR开发工具插件---VRTK 自带案例分析
- 50 Tips for Working with Unity全面的分析了Unity开发应注意的事