आपके ऐप्लिकेशन में ऐनिमेशन चालू करने की खास जानकारी

बिल्ड को कॉन्फ़िगर करना

अपने ऐप्लिकेशन में ऐनिमेशन को चालू करने के लिए, बिल्ड को कॉन्फ़िगर करने के लिए आपको build.gradle फ़ाइल में बदलाव करना होगा और अपने प्रोजेक्ट में ऐनिमेशन इंपोर्ट करने होंगे.

  1. सीनफ़ॉर्म ऐनिमेशन डिपेंडेंसी जोड़कर, किसी इंपोर्ट किए गए ऐनिमेशन मॉडल को रेंडर करने के लिए, अपने app's build.gradle को अपडेट करें:

     dependencies {
         …
         // Support for animated model renderables.
         implementation "com.google.ar.sceneform:animation:1.15.0"
         }
    
  2. इंपोर्ट की गई मॉडल वाली *.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, Android 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();