Unity में Geospatial Creator में, प्रोग्राम की मदद से ऐंकर बनाएं और उनमें बदलाव करें

इस गाइड में, C# स्क्रिप्ट लिखने के लिए Geospatial Creator का इस्तेमाल करने का तरीका बताया गया है. इससे, Unity के Edit मोड में ARGeospatialCreatorAnchor ऑब्जेक्ट बनाने और उन्हें एक जगह से दूसरी जगह ले जाने जैसे सामान्य काम तुरंत पूरे किए जा सकते हैं. यह सुविधा, पहले से तय की गई सूची से कई ऐंकर बनाने के लिए काम की हो सकती है. जैसे, स्प्रेडशीट या KML फ़ाइल.

Unity में Geospatial Creator की मदद से, Unity Editor में जियोस्पेशल कॉन्टेंट की झलक देखी जा सकती है. शुरुआत करने के लिए गाइड में, Geospatial Creator के बारे में बताया गया है. साथ ही, Unity Editor के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, कम से कम प्रोग्रामिंग के साथ, जगह की जानकारी के साथ काम करने वाले एआर (ऑगमेंटेड रिएलिटी) का पहला अनुभव बनाने का तरीका बताया गया है. ज़्यादा बेहतर प्रोजेक्ट के लिए, हो सकता है कि आप Unity Editor के यूज़र इंटरफ़ेस का इस्तेमाल करने के बजाय, प्रोग्राम के हिसाब से Geospatial Creator गेम ऑब्जेक्ट बनाएं और उनमें बदलाव करें.

इस गाइड में यह माना गया है कि आपको Geospatial Creator के बुनियादी कॉन्सेप्ट के बारे में पता है. ये कॉन्सेप्ट, 'शुरुआती जानकारी' में बताए गए हैं. साथ ही, यह भी माना गया है कि आप किसी सीन में Geospatial Creator के ऐंकर जोड़ने के लिए तैयार हैं. इसके लिए, आपके पास Geospatial Creator की सुविधा चालू होनी चाहिए. साथ ही, आपको एपीआई कुंजियों के साथ इसे कॉन्फ़िगर करना होगा. इसके अलावा, आपके सीन में शुरुआती एआर सेशन ऑब्जेक्ट भी होने चाहिए. अगर आपको शुरू से ही इस सुविधा का इस्तेमाल करना है, तो "Geospatial Creator चालू करें" सेक्शन को शामिल करते हुए, तुरंत शुरू करने के लिए बनी गाइड को पूरा पढ़ें.

शुरू करना

इस उदाहरण के लिए, मान लें कि आपके पास अमेरिका के सैन फ़्रांसिस्को के सिटी हॉल के आस-पास की ऐसी जगहों का एक सेट है जहां आपको एआर कॉन्टेंट दिखाना है. आपको इन सभी जगहों पर ऐंकर ऑब्जेक्ट बनाने होंगे. इसके बाद, उन ऐंकर में बुनियादी ज्यामिति जोड़नी होगी.

ऐंकर बनाने से पहले, आपको एक ARGeospatialCreatorOrigin तय करना होगा. यह अक्षांश, देशांतर, और ऊंचाई को Unity के वर्ल्ड निर्देशांक में बदलने और उनसे बदलने के लिए रेफ़रंस पॉइंट होता है. ऑरिजिन में एक CesiumGeoreference सब-कॉम्पोनेंट और एक Cesium3DTileset चाइल्ड ऑब्जेक्ट भी होगा. इससे Cesium, Unity एडिटर के सीन व्यू में आस-पास के इलाके को रेंडर कर पाएगा. इसके लिए, आपके पास Google Maps Tiles API पासकोड होना चाहिए. इस बारे में क्विकस्टार्ट में बताया गया है

ऑरिजिन बनाना

Geospatial Creator के लिए एपीआई में फ़ैक्ट्री मेथड शामिल है, ताकि सीन में ARGeospatialCreatorOrigin बनाया जा सके और ज़रूरी Cesium कॉम्पोनेंट जोड़े जा सकें. यहां दिया गया कोड, Map Tiles API की दी गई कुंजी का इस्तेमाल करके, आस-पास के अक्षांश, देशांतर, और उंचाई पर ऑरिजिन बनाता है:

ARGeospatialCreatorOrigin origin =
  GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
    37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");

डिफ़ॉल्ट रूप से, इस ऑब्जेक्ट को Unity वर्ल्ड निर्देशांक में (0, 0, 0) पर रखा जाता है, जो इस उदाहरण के लिए सही काम करता है.

ARAnchorManager रेफ़रंस पाना

रनटाइम के दौरान भौगोलिक डेटा वाले ऐंकर को हल करने के लिए, ARAnchorManager की ज़रूरत होती है. इसलिए, आपको सीन में ARAnchorManager का रेफ़रंस भी चाहिए. अगर आपने ARCore एक्सटेंशन के साथ बंडल किए गए Geospatial Sample ऐप्लिकेशन से शुरुआत की है, तो AnchorManager, "AR सेशन के ऑरिजिन" गेम ऑब्जेक्ट से जुड़ा होता है. मान लें कि आपके सीन में एक ही ऐंकर मैनेजर है, तो उसका रेफ़रंस इस तरह पाया जा सकता है:

ARAnchorManager anchorManager =
    Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];

अब आपके पास ऑरिजिन और ऐंकर मैनेजर है, इसलिए ARGeospatialCreatorAnchor ऑब्जेक्ट बनाना शुरू किया जा सकता है.

इलाके के ऐंकर बनाना

अमेरिका के कैलिफ़ोर्निया में सैन फ़्रांसिस्को के सिटी हॉल के पूर्वी हिस्से में मौजूद तीन पॉइंट के सटीक अक्षांश और देशांतर को दिखाने वाले double वैल्यू के इस दो-आयामी कलेक्शन पर विचार करें:

double[,] _cityHallEastPoints = {
    { 37.77936, -122.418617 }, // in front of city hall
    { 37.77965, -122.418680 }, // right of city hall
    { 37.77917, -122.418577 }}; // left of city hall

मान लें कि आपको हमारे एआर ऐप्लिकेशन में, इन सभी जगहों पर ज़मीन के लेवल पर एक मीटर का क्यूब रखना है. नीचे दिया गया कोड, ARGeospatialCreatorAnchor ऑब्जेक्ट बनाता है और उनकी प्रॉपर्टी को सही वैल्यू असाइन करता है:

for (int i = 0; i < _cityHallEastPoints.GetLength(0); i++)
{
  ARGeospatialCreatorAnchor anchor =
    new GameObject("City Hall " + i).AddComponent<ARGeospatialCreatorAnchor>();
  anchor.Origin = origin;
  anchor.AnchorManager = anchorManager;
  anchor.Latitude = _cityHallEastPoints[i, 0];
  anchor.Longitude = _cityHallEastPoints[i, 1];
  anchor.AltitudeType = AnchorAltitudeType.Terrain;

  GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
  cube.transform.parent = anchor.transform;
}

इससे हर पॉइंट पर इलाके के ऐंकर बन जाते हैं. Geospatial Creator, ARGeospatialCreatorOrigin ऑब्जेक्ट के हिसाब से उनकी जगह का हिसाब लगाकर, ऐंकर को Unity वर्ल्ड के सही निर्देशांक पर अपने-आप सेट करता है. इलाके के किसी ऐंकर की ऊंचाई में बदलाव करने के लिए, Altitude प्रॉपर्टी को इलाके की सतह से ऊपर या नीचे मीटर में सेट करें.

रनटाइम के दौरान, चल रहे ऐप्लिकेशन के लिए, टेरेन ऐंकर को ग्राउंड लेवल पर रिज़ॉल्व किया जाएगा. साथ ही, Altitude प्रॉपर्टी के हिसाब से ऑफ़सेट किया जाएगा. हालांकि, एडिटर के सीन व्यू में, ये डिफ़ॉल्ट रूप से WGS84 के हिसाब से 0 ऊंचाई पर रेंडर होते हैं, न कि 3D टाइल की ज्यामिति के हिसाब से. अक्सर, आपको एलिमेंट को इस जगह पर नहीं देखना होता. इसलिए, एडिटर के सीन व्यू में, एलिमेंट की डिफ़ॉल्ट ऊंचाई को बदला जा सकता है. इसके लिए, UseEditorAltitudeOverride प्रॉपर्टी को true पर सेट करें और EditorAltitudeOverride प्रॉपर्टी का इस्तेमाल करके, ऊंचाई को WGS84 मीटर में बताएं:

anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza

इन दोनों प्रॉपर्टी का, एडिटर मोड के बाहर कोई असर नहीं पड़ता. साथ ही, इन्हें ऐप्लिकेशन में कॉम्पाइल नहीं किया जाता.

सिटी हॉल प्लाज़ा में जियोस्पेशियल ऐंकर

छत पर जाकर शॉर्ट वीडियो बनाना

मान लें कि आपको अपने अगले ऐंकर के लिए, सिटी हॉल की छत पर ऐंकर लगाना है. ऐंकर को ठीक उसी तरह बनाया जा सकता है, सिवाय इसके कि AltitudeType प्रॉपर्टी को AnchorAltitudeType.Rooftop पर सेट किया गया हो:

ARGeospatialCreatorAnchor cityHallRoofAnchor =
  new GameObject("City Hall Roof").AddComponent<ARGeospatialCreatorAnchor>();
cityHallRoofAnchor.Origin = origin;
cityHallRoofAnchor.AnchorManager = anchorManager;
cityHallRoofAnchor.Latitude = 37.77959;
cityHallRoofAnchor.Longitude = -122.419006;
cityHallRoofAnchor.AltitudeType = AnchorAltitudeType.Rooftop;

GameObject roofCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
roofCube.transform.parent = cityHallRoofAnchor.transform;

टेरेन ऐंकर की तरह ही, UseEditorAltitudeOverride और EditorAltitudeOverride प्रॉपर्टी का इस्तेमाल करके, एडिटर के सीन व्यू में किसी रूफ़टॉप ऐंकर की ऊंचाई को बेहतर बनाया जा सकता है. इस उदाहरण के लिए, छत की WGS84 ऊंचाई करीब 10.7 मीटर है.

छत पर जियोस्पेशियल ऐंकर

किसी खास ऊंचाई पर ऐंकर बनाना

हमारा आखिरी ऐंकर, सिटी हॉल के गुंबद के सबसे ऊपर रखा जाएगा. इस ऐंकर के लिए, सटीक ऊंचाई ज़रूरी है. इसलिए, आपको इसे साफ़ तौर पर सेट करना होगा. इसके लिए, टेरेन या रूफ़टॉप ऐंकर के बजाय, WGS84 ऐंकर का इस्तेमाल करें:

ARGeospatialCreatorAnchor cityHallDomeAnchor =
  new GameObject("City Hall Dome").AddComponent<ARGeospatialCreatorAnchor>();
cityHallDomeAnchor.Origin = origin;
cityHallDomeAnchor.AnchorManager = anchorManager;
cityHallDomeAnchor.Latitude = 37.77928;
cityHallDomeAnchor.Longitude = -122.419241;
cityHallDomeAnchor.AltitudeType = AnchorAltitudeType.WGS84;
cityHallDomeAnchor.Altitude = 73;

GameObject domeCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
domeCube.transform.parent = cityHallDomeAnchor.transform;

सिर्फ़ एडिटर के लिए उपलब्ध, ऊंचाई को बदलने की सुविधा का इस्तेमाल करने की ज़रूरत नहीं है, क्योंकि ऊंचाई पहले से ही WGS84 के हिसाब से तय होती है. हालांकि, अगर एडिटर में मैप टाइल की ज्यामिति की ऊंचाई, असल दुनिया की तुलना में गलत निकलती है, तो भी सीन व्यू में ऐंकर की जगह बदलने के लिए, एडिटर की बदलाव करने की सुविधा का इस्तेमाल किया जा सकता है.

गुंबद पर जियोस्पेशियल ऐंकर