关于unity3d调用手机摄像机的一些操作

    xiaoxiao2021-12-04  17

    //存储路径     private string Path_save;     //读取路径     private string Path_read;     private string filepath;     private string destination;

        private string filename;

    IEnumerator getTexture2d()     {                 yield return new WaitForEndOfFrame();         Texture2D t = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);             t.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, true);         byte[] bytes = t.EncodeToPNG();         t.Compress(true);         t.Apply();         //获取系统时间         System.DateTime now = new System.DateTime();         now = System.DateTime.Now;         string filename = string.Format("image{0}{1}{2}{3}.png", now.Day, now.Hour, now.Minute, now.Second);         //记录每一个截图名字         StreamWriter sw;         FileInfo ft = new FileInfo(filepath);         if (!ft.Exists)         {             sw = ft.CreateText();         }         else         {             sw = ft.AppendText();         }         sw.WriteLine(filename);         sw.Close();         sw.Dispose();         //应用平台判断,路径选择         if (Application.platform == RuntimePlatform.Android)         {             string origin = Path_save;             destination = "/mnt/sdcard/DCIM/ARphoto";             if (!Directory.Exists(destination))             {                 Directory.CreateDirectory(destination);             }             destination = destination + "/" + filename;             Path_save = destination;         }         //保存文件         File.WriteAllBytes(Path_save, bytes);     }

    //以上代码是实现在unity3d里面截图并且保存在本地相册里面

     public string deviceName;//这个虽然public,但无需为其绑定变量,直接运行,默认调用,显示本地摄像机的名称     WebCamTexture webCam;

     void Start()     {         filepath = Application.persistentDataPath + "/test.txt";         WebCamDevice[] devices = WebCamTexture.devices;         deviceName = devices[0].name;         webCam = new WebCamTexture(deviceName, 400, 300, 12);        Renderer renderer = GetComponent<Renderer>();         renderer.material.mainTexture = webCam;

              webCam.Play();  //可以通过按键来控制打开或者关闭摄像头             }

    //以上是控制摄像头开关的代码

     public  void TakePhoto()     { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));       startActivityForResult(intent, PHOTOHRAPH);        File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");           }

    //以上这段代码 打开摄像机,手动拍照,这段代码是Android端的代码,在unity里面通过下面代码进行调用

    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");   //获取unity的Java类,只能调用静态方法,获取静态属性         AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");      //获取当前的Activity对象,能调用公开方法和公开属性               //一开始就调用安卓选择图片         jo.Call("TakePhoto"); 

    Android与unity3d交互的XML文件,用下载实例中的xml,只需修改包名就可以了

    转载请注明原文地址: https://ju.6miu.com/read-680320.html

    最新回复(0)