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

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

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

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

YouTube पर पॉडकास्ट शुरू करना

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

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

एक ऑरिजिन बनाएं

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

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

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

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

रनटाइम के दौरान जियोस्पेशियल ऐंकर को ठीक करने के लिए, ARAnchorManager की ज़रूरत होती है. इसलिए, आपको सीन में ARAnchorManager का रेफ़रंस भी देना होगा. अगर आपने ARCore एक्सटेंशन के साथ बंडल किए गए, जियोस्पेशियल सैंपल ऐप्लिकेशन के साथ शुरुआत की है, तो ऐंकर मैनेजर "AR सेशन ऑरिजिन" 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;
}

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

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

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