如何在Unity3d中仅使用C#打开/关闭android手电筒
有人知道如何在Unity中使用C#打开/关闭android手电筒吗? 我不喜欢插件,也不想自己做一个。是否有理由让我的设备使用纯C#打开或关闭手电筒 我试图将此脚本添加到主摄影机中,但没有成功:(如何在Unity3d中仅使用C#打开/关闭android手电筒,c#,android,unity3d,C#,Android,Unity3d,有人知道如何在Unity中使用C#打开/关闭android手电筒吗? 我不喜欢插件,也不想自己做一个。是否有理由让我的设备使用纯C#打开或关闭手电筒 我试图将此脚本添加到主摄影机中,但没有成功:( private bool激活; 私有AndroidJavaObject camera1; void FL_Start() { AndroidJavaClass cameraClass=新的AndroidJavaClass(“android.hardware.Camera”); WebCamDevice
private bool激活;
私有AndroidJavaObject camera1;
void FL_Start()
{
AndroidJavaClass cameraClass=新的AndroidJavaClass(“android.hardware.Camera”);
WebCamDevice[]设备=WebCamTexture.devices;
int-camID=0;
camera1=cameraClass.CallStatic(“打开”,camID);
如果(camera1!=null)
{
AndroidJavaObject cameraParameters=camera1.Call(“getParameters”);
cameraParameters.Call(“setFlashMode”、“torch”);
camera1.调用(“设置参数”,cameraParameters);
主动=真;
}
其他的
{
Debug.LogError(“[CameraParametersAndroid]摄像机不可用”);
}
}
void OnDestroy()
{
FL_停止();
}
无效FL_停止()
{
如果(camera1!=null)
{
摄像机1.呼叫(“审查”);
摄像机1.呼叫(“释放”);
主动=假;
}
其他的
{
Debug.LogError(“[CameraParametersAndroid]摄像机不可用”);
}
}
void OnGUI()
{
GUILayout.BeginArea(新矩形(屏幕宽度*0.1f,屏幕高度*0.1f,屏幕宽度*0.3f,屏幕高度*0.1f));
如果(!活动)
{
if(GUILayout.按钮(“启用手电筒”))
FL_Start();
}
其他的
{
if(GUILayout.按钮(“禁用手电筒”))
FL_停止();
}
GUILayout.EndArea();
}
较新的三星手机对代码非常挑剔
您需要使用camera1.Call(“startPreview”);
如下图所示
if (camera1 != null)
{
AndroidJavaObject cameraParameters = camera1.Call<AndroidJavaObject>("getParameters");
cameraParameters.Call("setFlashMode", "torch");
camera1.Call("setParameters", cameraParameters);
///FIX/////
camera1.Call("startPreview");
Active = true;
}
if(camera1!=null)
{
AndroidJavaObject cameraParameters=camera1.Call(“getParameters”);
cameraParameters.Call(“setFlashMode”、“torch”);
camera1.调用(“设置参数”,cameraParameters);
///固定装置//
camera1.呼叫(“startPreview”);
主动=真;
}
AndroidJavaObject-camera=null;
AndroidJavaObject cameraParameters=null;
void toggleandroid手电筒()
{
如果(摄像机==null)
{
AndroidJavaClass cameraClass=新的AndroidJavaClass(“android.hardware.Camera”);
camera=cameraClass.CallStatic(“打开”,0);
如果(照相机!=null)
{
cameraParameters=camera.Call(“getParameters”);
cameraParameters.Call(“setFlashMode”、“torch”);
调用(“设置参数”,cameraParameters);
}
}
其他的
{
cameraParameters=camera.Call(“getParameters”);
string flashmode=cameraParameters.Call(“getFlashMode”);
if(闪光模式!=“火炬”)
cameraParameters.Call(“setFlashMode”、“torch”);
其他的
cameraParameters.Call(“setFlashMode”、“off”);
调用(“设置参数”,cameraParameters);
}
}
void ReleaseAndroidJavaObjects()
{
如果(照相机!=null)
{
摄像机。呼叫(“释放”);
摄像机=零;
}
}
您可以看看Android摄像头捕获工具包的插件源代码()-我知道你说过你不喜欢插件,但是这个插件的源代码是可用的,可以让你看到需要调整的地方。关于你的问题,不是所有的手机都有Torch功能,所以这可能是你应该检查的?也许你应该使用unity本身使用的引用?你有没有连接这个脚本指向某个游戏对象?是的…主摄像头。但这在我的htc设备上工作!对你来说很有趣,在我的Galaxsy S5上它不工作。我收到一条错误消息,我的设备无法连接到摄像头服务。非常感谢!这是我在StackOverFlow上看到的最酷的答案之一。这个代码适用于所有设备还是仅适用于三星设备?
if (camera1 != null)
{
AndroidJavaObject cameraParameters = camera1.Call<AndroidJavaObject>("getParameters");
cameraParameters.Call("setFlashMode", "torch");
camera1.Call("setParameters", cameraParameters);
///FIX/////
camera1.Call("startPreview");
Active = true;
}
AndroidJavaObject camera=null;
AndroidJavaObject cameraParameters=null;
void ToggleAndroidFlashlight()
{
if (camera == null)
{
AndroidJavaClass cameraClass = new AndroidJavaClass("android.hardware.Camera");
camera = cameraClass.CallStatic<AndroidJavaObject>("open", 0);
if (camera != null)
{
cameraParameters = camera.Call<AndroidJavaObject>("getParameters");
cameraParameters.Call("setFlashMode","torch");
camera.Call("setParameters",cameraParameters);
}
}
else
{
cameraParameters = camera.Call<AndroidJavaObject>("getParameters");
string flashmode = cameraParameters.Call<string>("getFlashMode");
if(flashmode!="torch")
cameraParameters.Call("setFlashMode","torch");
else
cameraParameters.Call("setFlashMode","off");
camera.Call("setParameters",cameraParameters);
}
}
void ReleaseAndroidJavaObjects()
{
if (camera != null)
{
camera.Call("release");
camera = null;
}
}