Định cấu hình bản dựng
Việc định cấu hình bản dựng để bật ảnh động trong ứng dụng bao gồm việc sửa đổi tệp
build.gradle
và nhập ảnh động vào dự án của bạn.
Cập nhật
build.gradle
ứng dụng của bạn để hỗ trợ tính năng hiển thị mô hình ảnh động đã nhập bằng cách thêm phần phụ thuộc ảnh động Sceneform:dependencies { … // Support for animated model renderables. implementation "com.google.ar.sceneform:animation:1.15.0" }
Nhập và xem trước
*.fbx
tệp ảnh động để lấy tệp*.sfb
chứa mô hình đã nhập.
Sử dụng ảnh động trong thời gian chạy
Bạn có thể sử dụng thao tác thời gian chạy để:
(Không bắt buộc) Thêm hình động khác cho tài sản
Tạo một ảnh động kết xuất
Trong thời gian chạy, hãy sử dụng ModelRenderable.Builder
để tải *.sfb
và đính kèm vào một nút trong cảnh, như bạn thực hiện với mọi ModelRenderable
:
// 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);
Truy cập vào dữ liệu ảnh động
// Get the animation data called "andy_dance" from the `andyRenderable`.
AnimationData danceData = andyRenderable.getAnimationData("andy_dance");
Truy cập vào ảnh động dựa trên các siêu dữ liệu khác nhau
// Get the animation name.
danceData.getName();
Để truy xuất một phiên bản của dữ liệu ảnh động, hãy sử dụng các phương thức ModelRenderable.getAnimationData()
:
// Access animations by index.
numAnimations = andyRenderable.getAnimationDataCount();
danceData = andyRenderable.getAnimationData(0);
Kiểm soát tính năng phát lại
Tạo ModelAnimator
để điều khiển chế độ phát.
ModelAnimator andyAnimator = new ModelAnimator(danceData, andyRenderable);
Sử dụng start()
để phát lại ảnh động. Quá trình này sẽ tự động dừng ở cuối video.
andyAnimator.start();
Để lặp lại ảnh động, hãy sử dụng setRepeatCount()
andyAnimator.setRepeatCount(<number of repeats>)
(Không bắt buộc) Thêm toán tử ảnh động của tài sản
ModelAnimator
mở rộng lớp Animator
của Android, cho phép tương tác nhiều định dạng hơn, chẳng hạn như vòng lặp (loop), phản hồi sự kiện và bộ nội suy phi tuyến tính.
Sử dụng SkeletonNode
để xác định và đính kèm mô hình vào các xương
Khi bạn đang làm việc với một trình kết xuất có chứa xương, hãy sử dụng lớp SkeletonNode
để có quyền truy cập vào từng xương trong bộ xương bằng cách đính kèm các nút vào bộ xương. Điều này cho phép bạn "đính kèm" đối tượng vào xương hoặc kiểm soát vị trí của chúng.
Khi ảnh động đang phát, vị trí, tỷ lệ và hướng của
nút đính kèm sẽ được SkeletonNode
cập nhật từng khung. Việc đặt vị trí, tỷ lệ hoặc chế độ xoay của nút đính kèm sẽ ghi đè xương cho đến lần ảnh động được cập nhật vào lần tiếp theo.
Trong mẫu Animation, việc này được thực hiện bằng cách đính kèm Node
chứa mô hình một chiếc mũ cho bộ xương đầu của Andy. Khi Andy làm ảnh động, chiếc mũ sẽ đội trên đầu.
Truy cập vào thông tin về xương
Để truy cập vào thông tin về xương trong một ModelRenderable
,
hãy sử dụng các phương thức getBoneCount()
, getBoneName()
hoặc getBoneParent()
:
// 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();
Làm việc với SkeletonNode
giây
Lớp SkeletonNode
hiển thị bộ xương của một mô hình để đính kèm các nút vào
các bộ xương cụ thể.
Để sử dụng SkeletonNode
, hãy tạo một thực thể mới của thực thể đó và đặt kết xuất đồ hoạ thành có thể kết xuất chứa một mô hình có bộ xương.
andyWithSkeleton = new SkeletonNode();
andyWithSkeleton.setRenderable(andyRenderable);
andyWithSkeleton.setParent(scene);
Để đính kèm một kết xuất vào một xương cụ thể, trước tiên, hãy tạo một nút mới và đính kèm nút đó vào xương. Thêm nút chứa nội dung hiển thị làm phần tử con của nút đầu tiên. Để đảm bảo rằng tỷ lệ và độ xoay của xương không được dùng để đặt lượt chuyển đổi tương đối của các nút, hãy nhớ đặt lại tỷ lệ và vị trí của nút thứ hai.
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();