Uygulamanızda animasyonu etkinleştirmeye genel bakış

Derlemeyi yapılandırma

Uygulamanızda animasyonu etkinleştirmek için derlemeyi yapılandırmak için build.gradle dosyasını değiştirmeniz ve animasyonları projenize aktarmanız gerekir.

  1. uygulamanızın build.gradle öğesini, Sceneform animasyon bağımlılığını ekleyerek içe aktarılan animasyon modelini oluşturabilmesi için güncelleyin:

     dependencies {
         …
         // Support for animated model renderables.
         implementation "com.google.ar.sceneform:animation:1.15.0"
         }
    
  2. İçe aktarılan modeli içeren bir *.sfb dosyası almak için *.fbx animasyon dosyalarınızı içe aktarın ve önizleyin.

Çalışma zamanında animasyon kullanma

Çalışma zamanı işlemlerini kullanarak:

Oluşturulabilir animasyon oluşturma

Çalışma zamanında, *.sfb'ı yüklemek ve bunu herhangi bir ModelRenderable öğesinde olduğu gibi sahnedeki bir düğüme eklemek için ModelRenderable.Builder kullanın:

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

  // Attach the ModelRenderable to the node in the scene.
  Node andyNode = new Node();
  andyNode.setParent(arFragment.getArSceneView().getScene());
  andyNode.setRenderable(andyRenderable);

Animasyon verilerine erişme

// Get the animation data called "andy_dance" from the `andyRenderable`.
AnimationData danceData = andyRenderable.getAnimationData("andy_dance");

Animasyonlara farklı meta verilere göre erişme

     // Get the animation name.
     danceData.getName();

Animasyon verilerinin bir örneğini almak için ModelRenderable.getAnimationData() yöntemlerini kullanın:

     // Access animations by index.
     numAnimations = andyRenderable.getAnimationDataCount();
     danceData = andyRenderable.getAnimationData(0);

Çalmayı denetleme

Oynatmayı kontrol etmek için ModelAnimator oluşturun.

ModelAnimator andyAnimator = new ModelAnimator(danceData, andyRenderable);

Animasyonu oynatmak için start() tuşunu kullanın. Sonunda otomatik olarak duracak.

andyAnimator.start();

Animasyonu döngüye almak için setRepeatCount() kullanın

andyAnimator.setRepeatCount(<number of repeats>)

(İsteğe bağlı) Mülk animasyonu işlemleri ekleme

ModelAnimator, Android Animator sınıfını genişletir. Böylece dönüşme, etkinlikleri yanıtlama ve doğrusal olmayan interpolatörler gibi daha zengin etkileşimlere olanak tanır.

Modelleri kemiklere tanımlamak ve eklemek için SkeletonNode özelliğini kullanma

kemikler içeren bir oluşturma işlemi üzerinde çalışırken kemiklere düğümler ekleyerek iskeletteki kemiklere ayrı ayrı erişmek için SkeletonNode sınıfını kullanın. Bu, nesneleri kemiklere "eklemenize" veya konumlarını kontrol etmenize olanak tanır.

Animasyon oynatılırken, eklenen düğümün konumu, ölçeği ve yönü her karede SkeletonNode güncellenir. Eklenen düğümün konumunu, ölçeğini veya dönüşünü ayarlamak, kemiğin animasyon tarafından bir sonraki güncellemesine kadar kemiği geçersiz kılar.

Animasyon örneğinde, Andy'nin "başı" için kemike bir şapka modeli içeren bir Node eklenerek bu işlem gerçekleştirilir. Andy animasyonla oynatıldığında şapka başında kalır.

Kemikler hakkındaki bilgilere erişim

Bir ModelRenderabledaki kemiklerle ilgili bilgilere erişmek için getBoneCount(), getBoneName() veya getBoneParent() yöntemlerini kullanın:

// Get the number of bones in the model’s skeleton.
andyRenderable.getBoneCount();

// Get the names of the bones in the model’s skeleton.
andyRenderable.getBoneName();

// Get the hierarchy of the bones in the model’s skeleton.
andyRenderable.getBoneParent();

SkeletonNode ile çalışma

SkeletonNode sınıfı, belirli kemiklere düğüm eklemek için bir modelin iskeletini ortaya çıkarır.

SkeletonNode özelliğini kullanmak için şablonun yeni bir örneğini oluşturun ve oluşturulan öğeyi, iskeletli bir model içeren oluşturulabilir olarak ayarlayın.

 andyWithSkeleton = new SkeletonNode();
 andyWithSkeleton.setRenderable(andyRenderable);
 andyWithSkeleton.setParent(scene);

Oluşturulabilir bir kemiği oluşturmak için önce yeni bir düğüm oluşturun ve kemiğe ekleyin. Oluşturulabilir düğümü içeren düğümü ilk düğümün alt öğesi olarak ekleyin. Kemiğin ölçeğinin ve dönüşünün düğümlerin göreli dönüşümünü ayarlamak için kullanılmadığından emin olmak için ikinci düğümün ölçeğini ve konumunu sıfırladığınızdan emin olun.

 hatNode = new Node();
 Node boneNode = new Node();
 boneNode.setParent(andy);
 andy.setBoneAttachment(HAT_BONE_NAME, boneNode);
 hatNode.setRenderable(hatRenderable);
 hatNode.setParent(boneNode);
 hatNode.setWorldScale(Vector3.one());
 hatNode.setWorldRotation(Quaternion.identity());
 Vector3 pos = hatNode.getWorldPosition();