Möglicherweise müssen Sie ein Plugin schreiben, das den ISO-Wert und die Belichtung auf der Unity-Kamerainstanz festlegen kann. Sie können dies tun, indem Sie eine Instanz der running camera durch eine schwierige Hackerei, die das Auflösen der Kamera-Instanz betrifft, zur Verfügung stellen, und dann sollten Sie in der Lage sein, die ISO-/Belichtungsparameter zu injizieren.
Ein Beispiel für ein solches Plugin würde so etwas wie die Kamera Capture Kit für Unity (https://www.assetstore.unity3d.com/en/#!/content/56673)
Es Ihnen ermöglicht, sein in die Kamera anschließen und Eigenschaften gelten. Hier ist ein Ausschnitt, wie die Kamera aufgelöst wird.
Class clsPlayer = Class.forName("com.unity3d.player.UnityPlayer");
Field fCurrentActivity = clsPlayer.getDeclaredField("currentActivity");
fCurrentActivity.setAccessible(true);
com.unity3d.player.UnityPlayerActivity currentActivity = (com.unity3d.player.UnityPlayerActivity)fCurrentActivity.get(null);
ret.playerActivity = currentActivity;
Field fPlayer = currentActivity.getClass().getDeclaredField("mUnityPlayer");
fPlayer.setAccessible(true);
com.unity3d.player.UnityPlayer player = (com.unity3d.player.UnityPlayer)fPlayer.get(currentActivity);
ret.player = player;
Field f = player.getClass().getDeclaredField("y");
f.setAccessible(true);
java.util.ArrayList cameraArrays = (java.util.ArrayList)f.get(player);
int sz = cameraArrays.size();
Sie werden dann die Parameter innerhalb eines Android-Plugin ändern müssen, damit so etwas wie (von Camera Capture Kit Taken)
Camera.Parameters params = ret.camera.getParameters();
String flat = params.flatten();
String iso_keyword=null;
if(flat.contains("iso-values")) {
iso_keyword="iso";
} else if(flat.contains("iso-mode-values")) {
iso_keyword="iso";
} else if(flat.contains("iso-speed-values")) {
iso_keyword="iso-speed";
} else if(flat.contains("nv-picture-iso-values")) {
iso_keyword="nv-picture-iso";
}
if(iso_keyword == null) {
Log.d("Unity", "CameraCaptureKit: It looks like there was no support for iso on the device.");
return;
}
String strSupportedIsoValues = UnityCamera_GetSupportedISOValues();
ArrayList<String> supportedIsoValues = new ArrayList<String>(Arrays.asList(strSupportedIsoValues.split(",")));
//ArrayList<String> supportedIsoValues = Arrays.asList(strSupportedIsoValues.split(","));
boolean contains = false;
for(String isoValue : supportedIsoValues) {
if(isoValue.contains(newValue)) {
contains = true;
break;
}
}
if(contains == false) {
Log.d("Unity", "CameraCaptureKit: failed to set ISO, the value " + newValue + " is not supported. (" + strSupportedIsoValues + ")");
return;
}
// update the camera.
params.set(iso_keyword, newValue);
ret.camera.setParameters(params);
Prost
Die Konfigurationsänderung vor durchgeführt werden müssen Der Dienst ist verbunden. Machst du das? –
Ich glaube schon, Jason. Ich habe gerade einen anderen Test versucht, wo ich einen Parameter direkt vor dem Aufruf _TangoConnect() (Zeile 506, TangoApplication.cs) gesetzt habe und das ist das Ergebnis, das ich bekomme: TangoConfig.SetBool() Konnte key: config_color_mode_auto nicht mit value setzen : Falsch –