//changing config based on player prefs public void ChangeConfig() { if (cameraManager.descriptor.supportsCameraConfigurations) { using (var configs = cameraManager.GetConfigurations(Allocator.Temp)) { for (int i = 0; i < configs.Length; i++) { if (isPreferredConfig(configs[i])) { try { cameraManager.currentConfiguration = configs[i]; activeXRCameraConfig = configs[i]; break; } catch (Exception e) { Debug.LogError("setting cameraManager.currentConfiguration failed with exception: " + e); } } } } } }
/// <summary> /// Gets the stereo camera usage for this camera config. /// </summary> /// <param name="cameraConfig">An XRCameraConfiguration instance.</param> /// <returns>Returns the stereo camera usage type.</returns> public static CameraConfigStereoCameraUsage GetStereoCameraUsage( this XRCameraConfiguration cameraConfig) { return(CameraConfigApi.GetStereoCameraUsage( ARCoreExtensions._instance.currentARCoreSessionHandle, cameraConfig.nativeConfigurationHandle)); }
/// <summary> /// Gets the camera facing direction for this camera config. /// </summary> /// <param name="cameraConfig">An XRCameraConfiguration instance. /// </param> /// <returns>Returns the camera facing direction.</returns> public static CameraConfigFacingDirection GetFacingDirection( this XRCameraConfiguration cameraConfig) { return(CameraConfigApi.GetFacingDirection( ARCoreExtensions._instance.currentARCoreSessionHandle, cameraConfig.nativeConfigurationHandle)); }
protected IEnumerator InitCameraConf() { //https://forum.unity.com/threads/ar-foundation-camera-resolution.866743/ yield return(new WaitForSeconds(2)); //Dirty way : Wait for 2s to let time to camera to be enabled if (!cameraConfInited) { NativeArray <XRCameraConfiguration> confs = arCameraManager.GetConfigurations(Allocator.Temp); if (confs.Length == 0) { Debug.LogError("No Camera config found - Are you using an Android device?"); } else { XRCameraConfiguration bestConf = confs[0]; int bestPixels = bestConf.width * bestConf.height; foreach (XRCameraConfiguration conf in confs) //1 loop useless { int curPixels = conf.width * conf.height; if (curPixels > bestPixels) { bestPixels = curPixels; bestConf = conf; } Debug.Log("Conf: " + conf); } arCameraManager.subsystem.currentConfiguration = bestConf; cameraConfInited = true; Debug.Log("Init Best conf camera"); } } }
/// <summary> /// Gets the depth sensor usage for this camera config. /// </summary> /// <param name="cameraConfig">An XRCameraConfiguration instance. /// </param> /// <returns>Returns the depth sensor usage type.</returns> public static CameraConfigDepthSensorUsages GetDepthSensorUsages( this XRCameraConfiguration cameraConfig) { return(CameraConfigApi.GetDepthSensorUsages( ARCoreExtensions.Instance.CurrentARCoreSessionHandle, cameraConfig.nativeConfigurationHandle)); }
//checks config and changes it if necessary private void FrameReceived(ARCameraFrameEventArgs args) { if (!managerReceivedFrame) { managerReceivedFrame = true; if (cameraManager.descriptor.supportsCameraConfigurations) { //gets current config var cameraConfiguration = cameraManager.currentConfiguration; Assert.IsTrue(cameraConfiguration.HasValue); Debug.Log($"Current Config: {cameraConfiguration}"); //assigning the current config activeXRCameraConfig = (XRCameraConfiguration)cameraConfiguration; //referencing available configs when frame received in user prefs dict var availableConfigs = GetAvailableConfiguartionStrings(); PlayerPrefsHandler.Instance.ReferenceAvailableXRCameraConfigs(availableConfigs); //keep current config if it's the previously set one if (PlayerPrefsHandler.Instance.GetInt(cameraConfiguration.ToString(), -1) == 1) { Debug.Log("Current config has been the previously stored one"); PlayerPrefsHandler.Instance.SetDefaultXRCameraConfig(cameraConfiguration.ToString()); return; } //if the setting is not the stored one bool storedValue = false; //check if there is a stored setting and if change the xr camera settings for (int i = 0; i < availableConfigs.Count; i++) // (string config in availableConfigs) { if (PlayerPrefsHandler.Instance.GetInt(availableConfigs[i], -1) == 1) { Debug.Log($"Changing config to {availableConfigs[i]}"); storedValue = true; PlayerPrefsHandler.Instance.SetDefaultXRCameraConfig(availableConfigs[i]); ChangeConfig(); } } //storing the default setting if (storedValue == false) { if (availableConfigs.Count <= 1) { Debug.Log("there is just one config, not resetting"); return; } Debug.Log("No previous config has been stored"); PlayerPrefsHandler.Instance.SetDefaultXRCameraConfig(cameraConfiguration.ToString()); } } } }
//preferd config stored in player prefs static bool isPreferredConfig(XRCameraConfiguration config) { bool m_bool = false; for (int i = 0; i < PlayerPrefsHandler.Instance.CameraConfigList.Count; i++) { if (PlayerPrefsHandler.Instance.GetInt(PlayerPrefsHandler.Instance.CameraConfigList[i], -1) == 1) { if (PlayerPrefsHandler.Instance.CameraConfigList[i] == config.ToString()) { m_bool = true; } } } return(m_bool); }
/// <summary> /// Queries the supported camera configurations. /// </summary> /// <param name="defaultCameraConfiguration">A default value used to fill the returned array before copying /// in real values. This ensures future additions to this struct are backwards compatible.</param> /// <param name="allocator">The allocation strategy to use for the returned data.</param> /// <returns> /// The supported camera configurations. /// </returns> public override NativeArray <XRCameraConfiguration> GetConfigurations(XRCameraConfiguration defaultCameraConfiguration, Allocator allocator) { int configurationsCount; int configurationSize; IntPtr configurations = NativeApi.UnityARCore_Camera_AcquireConfigurations(out configurationsCount, out configurationSize); try { unsafe { return(NativeCopyUtility.PtrToNativeArrayWithDefault(defaultCameraConfiguration, (void *)configurations, configurationSize, configurationsCount, allocator)); } } finally { NativeApi.UnityARCore_Camera_ReleaseConfigurations(configurations); } }
public static CameraConfigurationResult UnityARCore_Camera_TrySetCurrentConfiguration(XRCameraConfiguration cameraConfiguration) { return(CameraConfigurationResult.Success); }
public static bool UnityARCore_Camera_TryGetCurrentConfiguration(out XRCameraConfiguration cameraConfiguration) { cameraConfiguration = default(XRCameraConfiguration); return(false); }
public static extern CameraConfigurationResult UnityARCore_Camera_TrySetCurrentConfiguration(XRCameraConfiguration cameraConfiguration);
public static extern bool UnityARCore_Camera_TryGetCurrentConfiguration(out XRCameraConfiguration cameraConfiguration);
/// <summary> /// Gets <paramref name="cameraConfiguration"/> as an ARCore <see cref="ArCameraConfig"/>. /// </summary> /// <remarks> /// **Note:** Do not <see cref="ArCameraConfig.Dispose"/> the returned <see cref="ArCameraConfig"/>. /// </remarks> /// <param name="cameraConfiguration">The /// [XRCameraConfiguration](xref:UnityEngine.XR.ARSubsystems.XRCameraConfiguration) being extended.</param> /// <returns>Returns the ARCore-specific representation of <paramref name="cameraConfiguration"/>.</returns> public static ArCameraConfig AsArCameraConfig(this XRCameraConfiguration cameraConfiguration) => ArCameraConfig.FromIntPtr(cameraConfiguration.nativeConfigurationHandle);
/// <summary> /// Gets the target camera capture frame rate range for this camera config. /// </summary> /// <param name="cameraConfig">An XRCameraConfiguration instance. /// </param> /// <returns>Returns the range from minimal target FPS to maximal target FPS.</returns> public static Vector2Int GetFPSRange(this XRCameraConfiguration cameraConfig) { return(CameraConfigApi.GetFPSRange( ARCoreExtensions._instance.currentARCoreSessionHandle, cameraConfig.nativeConfigurationHandle)); }
/// <summary> /// Gets the dimensions of the GPU-accessible external texture for this camera config. /// </summary> /// <param name="cameraConfig">An XRCameraConfiguration instance. /// </param> /// <returns>Returns the GPU texture dimensions.</returns> public static Vector2Int GetTextureDimensions(this XRCameraConfiguration cameraConfig) { return(CameraConfigApi.GetTextureDimensions( ARCoreExtensions.Instance.CurrentARCoreSessionHandle, cameraConfig.nativeConfigurationHandle)); }