本文将带你了解Android应用开发之unity打开移动摄像头,并自适应屏幕显示摄像头数据。兼容android和ios,希望本文对大家学Android有所帮助。
跨平台并自适应显示摄像头数据新建工程并建立UI
raw_Image的参数设置如下:
设置两个Canvas_UI和Canvas_Web的CamRender Mode都为Screen Space - Camera,并将Camera拖入。设置Canvas_UI的层级高于Canvas_WebCam
编写脚本,并将脚本挂在Canvas_WebCam
usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;
publicclassMT_Camera:MonoBehaviour{TransformuiRoot;TransformcamRoot;RawImagecam_Video;Toggletog_togCamera;WebCamTexturecamTexture;publicintw_cam=640;publicinth_cam=480;privatevoidAwake(){uiRoot=GameObject.Find("Canvas_UI").transform;camRoot=GameObject.Find("Canvas_WebCam").transform;}privatevoidStart(){cam_Video=camRoot.Find("raw_Image").GetComponent();tog_togCamera=uiRoot.Find("tog_ChangeCam").GetComponent();transform.GetComponent().referenceResolution=new Vector2(Screen.width,Screen.height);tog_togCamera.onValueChanged.AddListener(changeCam);tog_togCamera.isOn=true;///自适应屏幕分辨率显示摄像头数据//宽度不变,缩放高度自适应显示摄像头数据//cam_Video.rectTransform.sizeDelta=newVector2(h_cam*Screen.height/w_cam,Screen.width);//宽度不变,缩放宽度自适应显示摄像头数据cam_Video.rectTransform.sizeDelta=newVector2(Screen.height,w_cam*Screen.width/h_cam);}voidchangeCam(boolisOn){StartCoroutine(CallCamera(isOn));}IEnumeratorCallCamera(boolisOn){yieldreturnApplication.RequestUserAuthorization(UserAuthorization.WebCam);if(Application.HasUserAuthorization(UserAuthorization.WebCam)){if(camTexture!=null)camTexture.Stop();WebCamDevice[]cameraDevices=WebCamTexture.devices;stringdeviceName="";for(inti=0;i///翻转plane,正确显示摄像头数据//Ifsettotrueisturn.publicvoidTurnCam(boolisOn){#ifUNITY_IOS||UNITY_IPHONEif(!isOn)cam_Video.rectTransform.localEulerAngles=newVector3(180,0,90);elsecam_Video.rectTransform.localEulerAngles=newVector3(0,0,-90);#elifUNITY_ANDROIDif(!isOn)cam_Video.rectTransform.localEulerAngles=newVector3(180,180,90);elsecam_Video.rectTransform.localEulerAngles=newVector3(0,180,90);#endif}}
分别发布到xcode和android测试。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!