הגדרת המצלמה

ההגדרות של המצלמה מתארות את המאפיינים של חיישן המצלמה הבסיסי של האפליקציה. אפשר לגשת להגדרות האלה ב-Unity דרך XRCameraConfiguration.

בפלטפורמת Android, ARCore מספק את XRCameraConfigurationExtensions כדי לחשוף מאפיינים נוספים שספציפיים ל-ARCore בתוך XRCameraConfiguration. תוכלו להשתמש במאפיינים האלה כדי לקבוע את ההגדרות המתאימות של המצלמה באפליקציה.

מאפייני הגדרה של מצלמה מורחבת (Android)

המאפיינים המורחבים הבאים נתמכים על ידי ARCore בפלטפורמת Android.

גישה להגדרות המצלמה הנתמכות

כדי לגשת להגדרות המצלמה הנתמכות במכשיר מסוים, משתמשים ב-ARCameraManager.GetConfigurations(). הפעולה הזו מחזירה את הערך NativeArray שמכיל כמה מופעים של XRCameraConfiguration. כל מכונה היא הגדרה נפרדת של המצלמה שמציינים מאפיינים כמו שימוש בעומק, קצב הפריימים של הצילום היעד, הרזולוציה וממדי המרקם.

הגדרת המצלמה בסצנה של האפליקציה

כדי להגדיר את המצלמה בסצנה של האפליקציה, מבצעים את השלבים הבאים.

  1. משתמשים ב-ARCameraManager עם ARCameraManager.GetConfigurations() כדי להריץ שאילתות על רשימת XRCameraConfiguration הסוגים הנתמכים.

  2. אם אתם מפתחים ל-Android, תוכלו להשתמש בכל שילוב של הפונקציות ב-XRCameraConfigurationExtensions כדי לקבל מאפיינים ספציפיים ל-ARCore.

  3. משתמשים ב-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 ARCore נותנות עדיפות להגדרות של מצלמה שמשתמשות בחיישן העומק. כדי לסנן את כל ההגדרות של המצלמה באמצעות חיישן העומק, צריך לוודא שהשדה Depth Sensor Usage מוגדר לערך Do Not Use.

שימוש במסנני ההגדרות של המצלמה

יש לבצע את השלבים הבאים כדי לאפשר לאפליקציה לסנן את הגדרות המצלמה.

אפשר לעבור אל Assets > Create > XR > Camera Config Filter כדי ליצור מסנן הגדרות חדש למצלמה.

בוחרים את ההגדרות שבהן רוצים שהמסנן ישתמש.

לאחר יצירת המסנן, יש להשתמש בו ברכיב ARCoreExtensions.

הגדרת המצלמה בזמן ריצה

אפשר להשתמש באירוע הקריאה החוזרת (callback) 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;
}