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.
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" }
İç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:
(İsteğe bağlı) Başka mülk animasyonları ekleyin
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 ModelRenderable
daki 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();