カメラ構成では、アプリの基盤となるカメラセンサーのプロパティを記述します。Unity では、これらの構成には XRCameraConfiguration
からアクセスできます。
Android プラットフォームでは、ARCore が XRCameraConfigurationExtensions
を提供し、XRCameraConfiguration
内に ARCore 固有の追加プロパティを公開します。これらのプロパティを使用して、アプリに適したカメラ構成を設定できます。
カメラの拡張設定プロパティ(Android)
Android プラットフォームの ARCore では、次の拡張プロパティがサポートされています。
サポートされているカメラ構成にアクセスする
ARCameraManager.GetConfigurations()
を使用して、特定のデバイスでサポートされているカメラ設定にアクセスします。これは、XRCameraConfiguration
の複数のインスタンスを含む NativeArray
を返します。各インスタンスは、奥行きの使用率、ターゲット キャプチャ フレームレート、解像度、テクスチャの寸法などのプロパティを指定する個別のカメラ構成です。
アプリのシーンでカメラを構成する
アプリのシーンのカメラを構成する手順は次のとおりです。
ARCameraManager.GetConfigurations()
でARCameraManager
を使用して、サポートされているXRCameraConfiguration
のリストをクエリします。Android 用にビルドする場合は、
XRCameraConfigurationExtensions
の関数を組み合わせて、ARCore 固有のプロパティを取得します。cameraManager.currentConfiguration
を使用して現在の構成を設定します。
using UnityEngine.XR.ARFoundation;
// Adds XRCameraConfigurationExtensions extension methods to XRCameraConfiguration.
// This is for the Android platform only.
using Google.XR.ARCoreExtensions;
// Must be set in the editor.
public ARCameraManager cameraManager;
// Use ARCameraManager to obtain the camera configurations.
using (NativeArray<XRCameraConfiguration> configurations = cameraManager.GetConfigurations(Allocator.Temp))
{
if (!configurations.IsCreated || (configurations.Length <= 0))
{
return;
}
// Iterate through the list of returned configs to locate the config you want.
var desiredConfig = configurations[0];
for (int i = 1; i < configurations.Length; ++i)
{
// Choose a config for a given camera that uses the maximum
// target FPS and texture dimension. If supported, this config also enables
// the depth sensor.
if (configurations[i].GetFPSRange().y > desiredConfig.GetFPSRange().y &&
configurations[i].GetTextureDimensions().x > desiredConfig.GetTextureDimensions().x &&
configurations[i].GetTextureDimensions().y > desiredConfig.GetTextureDimensions().y &&
configurations[i].CameraConfigDepthSensorUsage() == CameraConfigDepthSensorUsage.RequireAndUse)
{
desiredConfig = configurations[i];
}
}
// Set the configuration you want. If it succeeds, the session
// automatically pauses and resumes to apply the new configuration.
// If it fails, cameraManager.currentConfiguration throws an exception.
if (desiredConfig != cameraManager.currentConfiguration)
{
cameraManager.currentConfiguration = desiredConfig;
}
}
カメラ構成フィルタ
ARCoreExtensionsCameraConfigFilter
を使用すると、アプリのニーズに基づいてフィルタリングすることで、特定のデバイスで利用可能なカメラ構成を実行時に絞り込むことができます。
カメラの撮影フレームレートを 30 FPS に制限する
アプリで高速なカメラ フレームレートを必要としない場合は、30 FPS に制限できます。60 FPS のカメラ フレームレートをサポートするデバイスでは、ARCore はデフォルトでそのフレームレートをサポートするカメラ設定を優先します。60 FPS をサポートするすべてのカメラ構成を除外するには、Target Camera Framerate が Target 30FPS に設定されていることを確認します。
ARCore がデプス センサーを使用できないようにする
アプリで深度が必要ない場合は、ARCore が深度センサーを使用しないようにできます。対応するデプス センサーを搭載したデバイスでは、ARCore はデプス センサーを使用するカメラ設定を優先します。深度センサーを使用するすべてのカメラ設定を除外するには、Depth Sensor Usage が Do Not Use に設定されていることを確認します。
カメラ構成フィルタを使用する
アプリがカメラ設定をフィルタできるようにする手順は次のとおりです。
Assets > Create > XR > Camera Config Filter に移動して、新しいカメラ構成フィルタを作成します。
フィルタで使用する設定を選択します。
フィルタを作成したら、ARCoreExtensions コンポーネントで使用します。
実行時にカメラを構成する
コールバック イベント ARCoreExtensions.OnChooseXRCameraConfiguration
を使用すると、デバイスの種類などの要素に基づいて、実行時にカメラを構成できます。
// Unity's Awake() method
public void Awake()
{
…
// If the return value is not a valid index (ex. the value if -1),
// then no camera configuration will be set. If no previous selection exists,
// the ARCore session will use the previously selected camera configuration
// or a default configuration.
arcoreExtensions.OnChooseXRCameraConfiguration = SelectCameraConfiguration;
…
}
// A custom camera configuration selection function
int SelectCameraConfiguration(List<XRCameraConfiguration> supportedConfigurations)
{
int index = 0;
// Use custom logic here to choose the desired configuration from supportedConfigurations.
return index;
}