博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unity3d 中控制手机前后摄像头切换
阅读量:6762 次
发布时间:2019-06-26

本文共 3198 字,大约阅读时间需要 10 分钟。

闲话少说,上代码,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爪爪学院查找。

转载地址:http://ygbeo.baihongyu.com/

你可能感兴趣的文章
.net开发笔记(十三) Winform常用开发模式第一篇
查看>>
The Info-Button Standard: Bring Meaningful Use To the Patient
查看>>
python开发_tempfile
查看>>
无线网破解软件|一键式破解无线网|BT17软件包下载[笔记本+软件就行]
查看>>
centos 编译安装Apache 2.4
查看>>
Qt 槽函数的使用
查看>>
序言<EntityFramework6.0>
查看>>
libevent安装及使用
查看>>
他们控制的定义-DragButton
查看>>
Matlab图像处理系列1———线性变换和直方图均衡
查看>>
wcf使用task实现异步调用
查看>>
逆向wireshark学习SSL协议算法(转)
查看>>
接受客户端传的inputstream类型转成string类型
查看>>
ASP.NET Core中的依赖注入(1):控制反转(IoC)
查看>>
微信公众帐号开发教程第14篇-自己定义菜单的创建及菜单事件响应
查看>>
CCF系列之Z字形扫描(201412-2)
查看>>
HDU4772(杭州赛区)
查看>>
Servlet中使用RequestDispatcher调派请求--include
查看>>
WinForm 清空界面控件值的小技巧
查看>>
【原创】互联网音视频直播架构方案(技术点)
查看>>