工作的第一个功能就是使用Unity进行拍照,并对拍照之后的照片进行上传服务器。上网查了很多相关的资料,当然了博客也有很多人提供了相关的代码。一开始我自己先做了个小项目,在window10下拍到照片。并能完整的保存在电脑当中。但是公司的项目是要导入到Ipad中的,这就涉及到了前置镜头和后者镜头的问题。电脑使用的是前置镜头,而Ipad则使用的后者镜头,这里就要进行计算转换。并且我发现导入到Ipad出现了拍照界面小了很多,真的是步步是坑,愁死我了。当然了,最后还是解决了。
public string deviceName;
public Vector2 resSize = new Vector2(241,665);
private Vector2 NewPoint = new Vector2(Screen.width/2,Screen.height/2);
public int height=856;
public int width=988;
WebCamTexture tex;
byte[] bs;
void OnGUI() {
if (tex != null)
{
GUIUtility.RotateAroundPivot(-90, new Vector2(NewPoint.x + height / 2, NewPoint.y + width / 2)); //围绕着某一个点旋转
GUIUtility.ScaleAroundPivot(new Vector2(1, -1), new Vector2(NewPoint.x + height / 2, NewPoint.y + width / 2)); // 将位置进行翻转
GUI.DrawTexture(new Rect(resSize.x, resSize.y,width,height), tex);
}
}
void Start(){
StartCoroutine(start());
}
void Update(){
if(input.getKey(keycode.1)){
StartCoroutine(getPhotos());
}
}
IEnumerator start()
{
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
deviceName = devices[0].name;
tex = new WebCamTexture(deviceName,width,height, 12);
tex.Play();
}
IEnumerator getPhotos()
{
yield return new WaitForEndOfFrame();
Texture2D t = new Texture2D(width,height);
t.ReadPixels(new Rect(resSize.x, resSize.y,width,height), 0,0);
bs = t.EncodeToPNG();
File.WriteAllBytes(Application.persistentDataPath + "/" + Time.deltaTime + ".png", bs);
t.Apply();
}
功能的实现跟其他博主的差不了多少,这里就多了一个前置转换后置的功能,还有就是导入到Ipad拍照的界面小了三倍,这个是根据我的项目得出来的。具体的还是要自己去测试吧!
刚刚开始写博客,可能不能将所知道的完整的表达出来,有什么疑问的话可以给我留言。有什么不足,有劳各位指出啦!