বিল্ড কনফিগার করা হচ্ছে
আপনার অ্যাপে অ্যানিমেশন সক্ষম করতে বিল্ড কনফিগার করার জন্য build.gradle
ফাইল পরিবর্তন করা এবং আপনার প্রোজেক্টে অ্যানিমেশন আমদানি করা জড়িত।
সিনফর্ম অ্যানিমেশন নির্ভরতা যোগ করে রেন্ডারযোগ্য একটি আমদানি করা অ্যানিমেশন মডেলকে সমর্থন করতে আপনার অ্যাপের
build.gradle
আপডেট করুন:dependencies { … // Support for animated model renderables. implementation "com.google.ar.sceneform:animation:1.15.0" }
আমদানি করা মডেল সহ একটি
*.sfb
ফাইল পেতে আপনার*.fbx
অ্যানিমেশন ফাইলগুলি আমদানি করুন এবং পূর্বরূপ দেখুন ৷
রানটাইমে অ্যানিমেশন ব্যবহার করা
রানটাইম অপারেশন ব্যবহার করুন:
রেন্ডারযোগ্য একটি অ্যানিমেশন তৈরি করা
রানটাইমে, *.sfb
লোড করতে ModelRenderable.Builder
ব্যবহার করুন এবং দৃশ্যের একটি নোডের সাথে এটি সংযুক্ত করুন, যেমন আপনি যেকোনো 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);
অ্যানিমেশন ডেটা অ্যাক্সেস পান
// Get the animation data called "andy_dance" from the `andyRenderable`.
AnimationData danceData = andyRenderable.getAnimationData("andy_dance");
বিভিন্ন মেটাডেটার উপর ভিত্তি করে অ্যানিমেশন অ্যাক্সেস করা
// Get the animation name.
danceData.getName();
অ্যানিমেশন ডেটার একটি উদাহরণ পুনরুদ্ধার করতে, ModelRenderable.getAnimationData()
পদ্ধতিগুলি ব্যবহার করুন:
// Access animations by index.
numAnimations = andyRenderable.getAnimationDataCount();
danceData = andyRenderable.getAnimationData(0);
প্লেব্যাক নিয়ন্ত্রণ করুন
প্লেব্যাক নিয়ন্ত্রণ করতে একটি ModelAnimator
তৈরি করুন।
ModelAnimator andyAnimator = new ModelAnimator(danceData, andyRenderable);
অ্যানিমেশন প্লে ব্যাক করতে start()
ব্যবহার করুন। এটি শেষে স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে।
andyAnimator.start();
অ্যানিমেশন লুপ করতে, setRepeatCount()
ব্যবহার করুন
andyAnimator.setRepeatCount(<number of repeats>)
(ঐচ্ছিক) সম্পত্তি অ্যানিমেশন অপারেশন যোগ করুন
ModelAnimator
অ্যান্ড্রয়েড Animator
ক্লাসকে প্রসারিত করে, যা লুপিং , ইভেন্টে প্রতিক্রিয়া এবং নন-লিনিয়ার ইন্টারপোলেটরের মতো আরও সমৃদ্ধ মিথস্ক্রিয়াকে অনুমতি দেয়।
হাড় সনাক্ত করতে এবং মডেল সংযুক্ত করতে SkeletonNode
ব্যবহার করে
যখন আপনি একটি রেন্ডারযোগ্য হাড়ের সাথে কাজ করছেন, তখন হাড়ের সাথে নোডগুলি সংযুক্ত করে কঙ্কালের পৃথক হাড়গুলিতে অ্যাক্সেস পেতে SkeletonNode
ক্লাসটি ব্যবহার করুন৷ এটি আপনাকে হাড়ের সাথে বস্তু "সংযুক্ত" করতে বা তাদের অবস্থান নিয়ন্ত্রণ করতে দেয়।
অ্যানিমেশন চলাকালীন, সংযুক্ত নোডের অবস্থান, স্কেল এবং অভিযোজন প্রতিটি ফ্রেমের SkeletonNode
নোড দ্বারা আপডেট করা হয়। সংযুক্ত নোডের অবস্থান, স্কেল বা ঘূর্ণন সেট করা হাড়টিকে পরের বার অ্যানিমেশন দ্বারা আপডেট না করা পর্যন্ত হাড়কে ওভাররাইড করবে।
অ্যানিমেশন নমুনায়, অ্যান্ডির "মাথার" হাড়ের সাথে একটি টুপির মডেল সম্বলিত একটি Node
সংযুক্ত করে এটি করা হয়৷ অ্যান্ডি অ্যানিমেটেড হলে, টুপি তার মাথায় থাকে।
হাড় সম্পর্কে তথ্য অ্যাক্সেস করা
একটি ModelRenderable
এ হাড় সম্পর্কে তথ্য অ্যাক্সেস করতে, getBoneCount()
, getBoneName()
, বা 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();
SkeletonNode
এর সাথে কাজ করা
SkeletonNode
ক্লাস নির্দিষ্ট হাড়ের সাথে নোড সংযুক্ত করার জন্য একটি মডেলের কঙ্কালকে প্রকাশ করে।
SkeletonNode
ব্যবহার করতে, এটির একটি নতুন ইন্সট্যান্টিয়েশন তৈরি করুন এবং রেন্ডারেবলকে রেন্ডারেবল সেট করুন যাতে একটি কঙ্কাল সহ একটি মডেল রয়েছে।
andyWithSkeleton = new SkeletonNode();
andyWithSkeleton.setRenderable(andyRenderable);
andyWithSkeleton.setParent(scene);
একটি নির্দিষ্ট হাড়ের সাথে একটি রেন্ডারযোগ্য সংযুক্ত করতে, প্রথমে একটি নতুন নোড তৈরি করুন এবং এটি হাড়ের সাথে সংযুক্ত করুন। প্রথম নোডের চাইল্ড হিসাবে রেন্ডারযোগ্য নোড যুক্ত করুন। নোডের আপেক্ষিক রূপান্তর সেট করতে হাড়ের স্কেল এবং ঘূর্ণন ব্যবহার করা হয় না তা নিশ্চিত করতে, দ্বিতীয় নোডের স্কেল এবং অবস্থান পুনরায় সেট করতে ভুলবেন না।
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();