您的位置:首页 > 移动开发 > Unity3D

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

2012-11-08 19:36 405 查看
闲话少说,上代码,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();
}

}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: