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

本文介绍了一个Unity脚本,用于实现前后摄像头的切换及拍照功能。通过使用WebCamTexture,该脚本能够捕获画面并保存为图片。代码中包含了按钮事件处理,以及在编辑器环境下对前摄头的支持检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闲话少说,上代码,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{

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

}







更多unity2018的功能介绍请到paws3d爪爪学院查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值