我想要从安卓设备获得相机的数量,检查一个是否是背板,并为该相机获得水平和垂直视角Camera.Parameters.getHorizontalViewAngle()。
我想通过一个Unity3D c#脚本来完成这个任务,但是我的java技能是有限的。有人能提供帮助吗?我有这样的代码:
using UnityEngine;
#if UNITY_ANDROID
public class CameraParametersAndroid
{
public static float HorizontalViewAngle { get; protected set; }
public static float VerticalViewAngle { get; protected set; }
public static int numCameras { get; protected set; }
static CameraParametersAndroid()
{
AndroidJavaClass unityPlayerClass = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"),
cameraClass = new AndroidJavaClass ("android.hardware.Camera"),
cameraParametersClass = new AndroidJavaClass ("android.hardware.Camera.Parameters"),
cameraInfoClass = new AndroidJavaClass ("android.hardware.Camera.CameraInfo");
AndroidJavaObject currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
object[] args = {currentActivity};
AndroidJavaObject camera = cameraClass.CallStatic<AndroidJavaObject>("getCamera", args);
if (camera != null)
{
AndroidJavaObject cameraParameters = camera.Call<AndroidJavaObject>("getParameters");
numCameras = camera.Call<int>("getNumberOfCameras");
HorizontalViewAngle = cameraParameters.Call<float>("getHorizontalViewAngle");
VerticalViewAngle = cameraParameters.Call<float>("getVerticalViewAngle");
}
else
{
Debug.LogError("[CameraParametersAndroid] Camera not available");
}
}
}
#endif但即使是getNumberOfCameras()调用也不起作用。
发布于 2013-08-31 18:11:06
getNumberOfCameras是一个静态方法,所以您需要CallStatic您的'cameraClass‘
在'getCamera‘中没有'android.hardware.Camera’方法(或者至少我在文档中找不到它)。你应该用'Camera.open‘代替,但是有一个窍门。“Camera.open”要求你的应用程序有相机功能,除非你使用内置的摄像头功能,否则它不是由团结生成的。
以下是关于Android的工作:
using UnityEngine;
#if UNITY_ANDROID
public class CameraParametersAndroid
{
public static float HorizontalViewAngle { get; protected set; }
public static float VerticalViewAngle { get; protected set; }
public static int numCameras { get; protected set; }
static CameraParametersAndroid()
{
AndroidJavaClass cameraClass = new AndroidJavaClass("android.hardware.Camera");
numCameras = cameraClass.CallStatic<int>("getNumberOfCameras");
// This is an ugly hack to make Unity
// generate Camera permisions
WebCamDevice[] devices = WebCamTexture.devices;
// Camera.open gets back-facing camera by default
// you should check for exceptions
int camID = 0;
AndroidJavaObject camera = cameraClass.CallStatic<AndroidJavaObject>("open", camID);
// I'm pretty sure camera will never be null at this point
// It will either be a valid object or Camera.open would throw an exception
if (camera != null)
{
AndroidJavaObject cameraParameters = camera.Call<AndroidJavaObject>("getParameters");
HorizontalViewAngle = cameraParameters.Call<float>("getHorizontalViewAngle");
VerticalViewAngle = cameraParameters.Call<float>("getVerticalViewAngle");
}
else
{
Debug.LogError("[CameraParametersAndroid] Camera not available");
}
}
}
#endifhttps://stackoverflow.com/questions/18450404
复制相似问题