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

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

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();
 
    }
	
    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();
	}
	
}



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值