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 टाइल की ज्यामिति के हिसाब से. अक्सर, आपको उन्हें वहां नहीं देखना होता. इसलिए, Editor के सीन व्यू में ऐंकर की डिफ़ॉल्ट ऊंचाई को बदला जा सकता है. इसके लिए, 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 के हिसाब से तय होती है. हालांकि, अगर एडिटर में मैप टाइल की ज्यामिति की ऊंचाई, असल दुनिया की तुलना में गलत निकलती है, तो भी सीन व्यू में ऐंकर की जगह बदलने के लिए, एडिटर की बदलाव करने की सुविधा का इस्तेमाल किया जा सकता है.

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