unity3d 中控制手机前后摄像头切换

闲话少说,上代码,google上搜来的代码,不过里面有bug,不能顺利切换,下面的代码是已经修改过的,经测试,可以正常运行。

<pre class="css" name="code">using System;
using UnityEngine;
using System.IO;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
        //public GUITexture mytext;
        public UITexture mytext;
        
        private WebCamTexture frontWebcamTexture = null;

        private WebCamTexture rearWebcamTexture = null;
        
        private WebCamDevice[] devices;
        [HideInInspector]
        public WebCamTexture activeCam;
        
        
        bool flag = false ;
        static int cameraIndex = 0 ;
        
        /* 按钮控件 */
        public GameObject btn_shot ;
        public GameObject btn_change_camera ;
 
    void Awake () {
        
                        
                for( int i = 0 ; i < WebCamTexture.devices.Length ; i++ )
        NGUIDebug.Log(WebCamTexture.devices[i].name);
                
                devices = WebCamTexture.devices;

                string frontCamName = "";
                
                string rearCamName = "";
                        
                for(int i=0; i<devices.Length; i++)
                {
                
                        if (devices[i].isFrontFacing)
                        
                        frontCamName = devices[i].name;
                        
                        else
                        
                        rearCamName = devices[i].name;
                
                }
                
                frontWebcamTexture = new WebCamTexture(frontCamName);
                
                rearWebcamTexture = new WebCamTexture(rearCamName);
                
                frontWebcamTexture.Stop();
                rearWebcamTexture.Stop();
                activeCam = rearWebcamTexture;
                //mytext.material.mainTexture = rearWebcamTexture ;
                mytext.material.SetTexture("_MainTex", rearWebcamTexture);
                
                activeCam.Play();
                
    }
        
        void Start()

        {
        
                /* 事件 */
                UIEventListener.Get(btn_shot).onClick += OnShotButtonClick ;
                UIEventListener.Get(btn_change_camera).onClick += OnCameraChangeClick ;
                
                NGUIDebug.Log ("Active camera: " + activeCam);
        
        }
                
        public bool HasFrontCamera()
        {
        
                if (Application.isEditor)
                
                    return false;
        
                return frontWebcamTexture.deviceName != "";
        
        }
        
        
        public void OnShotButtonClick (GameObject go) {
                SavePhoto() ;
        }
        
        /* 相机切换 */
        public void OnCameraChangeClick (GameObject go) {

                if (!HasFrontCamera())

                return;

                
                activeCam.Stop ();
                
                if (activeCam == frontWebcamTexture)
                
                {
                
                        NGUIDebug.Log ("Switching to rear cam...");
                        
                        //renderer.material.mainTexture = rearWebcamTexture;
                        //mytext.material.mainTexture = rearWebcamTexture ;
                        mytext.material.SetTexture("_MainTex", rearWebcamTexture);
                        activeCam = rearWebcamTexture;
                
                }
                
                else

                {
                
                        NGUIDebug.Log ("Switching to front cam...");
                        
                        
                        //mytext.material.mainTexture = frontWebcamTexture ;
                        mytext.material.SetTexture("_MainTex", frontWebcamTexture);
                        
                        activeCam = frontWebcamTexture;
                
                }

                NGUIDebug.Log ("... done.");

                NGUIDebug.Log("Trying to Play the active WebCamTexture: (" + activeCam + ")");

                activeCam.Play();
        }
 
    public void ShowCamera()
    {
        //myCameraTexture.guiTexture.enabled = true;
                mytext.enabled = true;
        activeCam.Play();
                NGUIDebug.Log("-------------show--------->>>>>" + mytext) ;
                
    }
 
    public void HideCamera()
    {
                 NGUIDebug.Log("-------------hide--------->>>>>" + mytext) ;
        //myCameraTexture.guiTexture.enabled = false;
        mytext.enabled = false;
                activeCam.Stop();
 
    }
        
</pre><pre class="css" name="code"> public void SavePhoto() {
                
                NGUIDebug.Log("***************oh fuck***********************finally worked!!!") ;

                Texture tex = mytext.material.mainTexture;

                Texture2D tx = new Texture2D(activeCam.width, activeCam.height) ;
                tx.SetPixels(activeCam.GetPixels());

                
                byte[] byte_photo = tx.EncodeToPNG() ;
                NGUIDebug.Log("#####length######################333333" + byte_photo.Length) ;
                string photoName = "nimei.png" ;
                
                FileStream fs = new System.IO.FileStream("/mnt/sdcard/DCIM/Camera/nimei.png", System.IO.FileMode.Create);
            fs.Write(byte_photo,0,byte_photo.Length);
            fs.Close();
        }
        
}</pre><br>
<pre></pre>
<p><br>
</p>

更多unity2018的功能介绍请到paws3d爪爪学院查找。链接https://www.paws3d.com/,也可以加入unity学习讨论群935714213

近期更有资深开发人士直播分享unity开发经验,详情请进入官网或加入QQ群了解

猜你喜欢

转载自blog.csdn.net/qq_35037137/article/details/89284524