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

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

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

इस गाइड में यह माना गया है कि आपको 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 एक्सटेंशन के साथ बंडल किया गया जियोस्पेशल सैंपल ऐप्लिकेशन, ऐंकर मैनेजर को "एआर सेशन की शुरुआत की जगह" से अटैच किया गया है GameObject मान लें कि आपके पास अपने सीन में सिर्फ़ एक ऐंकर मैनेजर शामिल होता है, तो आपको उसका रेफ़रंस इस तरह से मिल सकता है शामिल करें:

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 प्रॉपर्टी के हिसाब से ऑफ़सेट किया जाएगा. हालांकि, एडिटर के सीन व्यू में डिफ़ॉल्ट रूप से 0 की WGS84 ऊंचाई पर रेंडर होता है, न कि 3d टाइल से संबंधित ज्यामिति शामिल करें. अक्सर, आपको उन्हें वहां नहीं देखना होता. इसलिए, Editor के सीन व्यू में ऐंकर की डिफ़ॉल्ट ऊंचाई को बदला जा सकता है. इसके लिए, UseEditorAltitudeOverride प्रॉपर्टी को true पर सेट करें और EditorAltitudeOverride प्रॉपर्टी का इस्तेमाल करके, ऊंचाई को WGS84 मीटर में बताएं:

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

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

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

छत पर ऐंकर बनाना

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

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