Pierwsze kroki z Sceneform

Na tej stronie opisano kluczowe zagadnienia, korzystając z kodu w przykładowej aplikacji Hello Sceneform. Uwaga:

  • W tym przykładzie używane są dane Sceneform i ARCore.

    Aby używać funkcji Sceneform bez ARCore, postępuj zgodnie z poniższymi instrukcjami, ignorując wymagania dotyczące zależności ARCore i uprawnienia CAMERA. Użyj SceneView w układzie aplikacji zgodnie z opisem w sekcji Tworzenie sceny.

  • Ta przykładowa aplikacja jest napisana jako aplikacja wymagana AR.

    Aby dowiedzieć się więcej na temat aplikacji AR opcjonalny i ARWymagane, przeczytaj artykuł Włączanie ARCore.

Aby zacząć korzystać ze Sceneform w swoim projekcie, musisz:

  1. Importowanie wtyczki Sceneform
  2. Skonfiguruj pliki projektu build.gradle
  3. Zaktualizuj AndroidManifest.xml
  4. Przeprowadzanie testów środowiska wykonawczego i tworzenie widoku sceny
  5. Tworzenie możliwości renderowania
  6. Tworzenie sceny

Importowanie wtyczki Sceneform do projektu

Po zainstalowaniu wtyczki Sceneform możesz importować, wyświetlać i tworzyć zasoby 3D w aplikacjach Sceneform SDK dla AR w Android Studio. Wymaga Androida Studio w wersji 3.1 lub nowszej.

Aby zainstalować wtyczkę:

  1. W Android Studio otwórz ustawienia wtyczek:

    • Windows: > Settings > Plugins > Przeglądaj Repositories

    • macOS: Android Studio > Preferences > Plugins

  2. Kliknij Przeglądaj repozytoria i zainstaluj Narzędzia Google Sceneform (beta).

Skonfiguruj pliki build.gradle projektu

  1. Upewnij się, że projekt projektu build.gradle zawiera repozytorium Google Maven:

    allprojects {
        repositories {
            google()
            …
    
  2. Zaktualizuj aplikacje build.gradle, aby dodać najnowsze zależności ARCore i Sceneform UX i upewnić się, że ustawienia projektu są zgodne z obiema bibliotekami.

    android {
        …
        defaultConfig {
            // Sceneform requires minSdkVersion >= 24.
            minSdkVersion 24
            …
        }
        // Sceneform libraries use language constructs from Java 8.
        // Add these compile options if targeting minSdkVersion < 26.
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    dependencies {
        …
        // Provides ARCore Session and related resources.
        implementation 'com.google.ar:core:1.15.0'
    
        // Provides ArFragment, and other UX resources.
        implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0'
    
        // Alternatively, use ArSceneView without the UX dependency.
        implementation 'com.google.ar.sceneform:core:1.15.0'
    }
    

Aktualizowanie elementu AndroidManifest.xml

Zmodyfikuj AndroidManifest.xml, by wskazać, że aplikacja używa (AR opcjonalny) lub wymaga (wymaganych AR) dostępu do ARCore i CAMERA:

<!-- Both "AR Optional" and "AR Required" apps require CAMERA permission. -->
<uses-permission android:name="android.permission.CAMERA" />

<!-- Sceneform requires OpenGL ES 3.0 or later. -->
<uses-feature android:glEsVersion="0x00030000" android:required="true" />

<!-- Indicates that app requires ARCore ("AR Required"). Ensures the app is
     visible only in the Google Play Store on devices that support ARCore.
     For "AR Optional" apps remove this line. -->
<uses-feature android:name="android.hardware.camera.ar" />

<application>
    …
    <!-- Indicates that app requires ARCore ("AR Required"). Causes the Google
         Play Store to download and install Google Play Services for AR along
         with the app. For an "AR Optional" app, specify "optional" instead of
         "required".
    -->
    <meta-data android:name="com.google.ar.core" android:value="required" />
</application>

Przeprowadzanie testów środowiska wykonawczego i tworzenie widoku sceny

Najprostszym sposobem na rozpoczęcie korzystania ze sceny i tworzenie widoku sceny jest użycie narzędzia ArFragment, które automatycznie obsługuje zarządzanie sesją ARCore po przeprowadzeniu niezbędnych kontroli środowiska wykonawczego ARCore:

  1. Sprawdza, czy jest zainstalowana zgodna wersja Usług Google Play dla AR, dzięki czemu użytkownik może zainstalować lub zaktualizować ją w razie potrzeby.

  2. Sprawdza, czy aplikacja ma dostęp do aparatu, i prosi użytkownika o pozwolenie, jeśli jeszcze nie otrzymała dostępu.

Jeśli aplikacja potrzebuje dodatkowych uprawnień lub chce dostosować sposób i czas tworzenia sesji AR, możesz:

  • Utwórz klasę podrzędną ArFragment, aby poprosić o dodatkowe uprawnienia.

  • Użyj lub rozwiń ArSceneView bezpośrednio. Twoja aplikacja musi wykonać sprawdzanie wersji ARCore i wywołać metodę setupSession(), aby ręcznie utworzyć sesję ARCore, jak pokazano w przykładzie Układu Słonecznego.

Po przejściu weryfikacji ArFragment tworzy:

  1. ArSceneView dostępne przez getArSceneView(), które:

    • Renderuje zdjęcia z aparatu na sesji.

    • Renderuje wbudowaną animację UX Sceneform, która pokazuje użytkownikom, jak przenieść telefon, aby aktywować AR.

    • Wyróżnione informacje Planes z domyślną wartością PlaneRenderer

  2. ARCore Session, dostępne przez getSession()

Aby wykorzystać komponent ArFragment w aplikacji, dodaj go do układu aktywności w postaci przykładowej w sekcji activity_ux.xml w przykładzie Hello Sceneform:

<fragment android:name="com.google.ar.sceneform.ux.ArFragment"
    android:id="@+id/ux_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Tworzenie elementów renderowania

Renderable to model 3D, który można umieścić w dowolnym miejscu na scenie i składa się z siatek, materiałów i tekstur.

Renderowanie można utworzyć za pomocą:

Przykładowa aplikacja tworzy renderowany plik z pliku zasobu andy.obj w 3D. Podczas importowania tego zasobu wtyczka Sceneformaktualizuje aplikację&<39;s build.gradle, aby zastosować tę wtyczkę i dodać sceneform.asset()w zaimportowanym modelu:

apply plugin: 'com.google.ar.sceneform.plugin'

sceneform.asset('sampledata/models/andy.obj', // 'Source Asset Path' specified during import.
                'default',                    // 'Material Path' specified during import.
                'sampledata/models/andy.sfa', // '.sfa Output Path' specified during import.
                'src/main/res/raw/andy')      // '.sfb Output Path' specified during import.

Zasób res/raw/andy jest używany do utworzenia elementu ModelRenderable:

private ModelRenderable andyRenderable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    …

    ModelRenderable.builder()
        .setSource(this, R.raw.andy)
        .build()
        .thenAccept(renderable -> andyRenderable = renderable)
        .exceptionally(
            throwable -> {
            Log.e(TAG, "Unable to load Renderable.", throwable);
            return null;
        });
}

Tworzenie sceny

ARSceneView ma dołączony tag Scene. Scena to przypominająca drzewa struktura danych, która zawiera obiekty Node, które są renderowane.

Tutaj można zobaczyć stan Andy i dołączyć go bezpośrednio do węzła głównego Scene:

Node node = new Node();
node.setParent(arFragment.getArSceneView().getScene());
node.setRenderable(andyRenderable);

Każdy węzeł zawiera wszystkie informacje potrzebne do renderowania Sceneform (w tym pozycję, orientację i obiekt renderowany), a także wchodzi w interakcje z nim (w tym kształt kolizji i detektory zdarzeń).

Węzły można dodawać do innych węzłów, tworząc relację nadrzędna-podrzędna. Gdy węzeł jest podrzędny wobec innego węzła, porusza się, obraca i skaluje razem z nadrzędnym elementem, np. jak ramiona poruszają się, gdy ciało porusza się. Węzeł może mieć wiele elementów podrzędnych, ale tylko jeden element nadrzędny i w ten sposób tworzyć strukturę przypominającą drzewo. Struktura ta nosi nazwę wykresu sceny.

Każda scena renderuje wykres scenowy z punktu widzenia kamery (obsługiwane przez śledzenie ruchu w ARCore). Aplikacja może wchodzić w interakcję ze sceną, nasłuchując zdarzeń dotyku i gestów, wykonując testy działań na węzłach i umieszczając kotwice. Więcej informacji znajdziesz w artykule Kompilowanie i interakcja ze sceną.