জিওস্পেশিয়াল ক্রিয়েটর ইন ইউনিটিতে প্রোগ্রাম্যাটিকভাবে অ্যাঙ্কর তৈরি এবং সম্পাদনা করুন

এই নির্দেশিকাটি বর্ণনা করে কিভাবে জিওস্পেশিয়াল ক্রিয়েটর ব্যবহার করে C# স্ক্রিপ্ট লেখার জন্য সাধারণ কাজগুলি যেমন ARGeospatialCreatorAnchor অবজেক্ট তৈরি করা এবং সরানো ইউনিটির সম্পাদনা মোডে দ্রুত সম্পন্ন করা যায়। এটি একটি পূর্বনির্ধারিত তালিকা যেমন একটি স্প্রেডশীট বা একটি KML ফাইল থেকে একাধিক অ্যাঙ্কর তৈরি করতে কার্যকর হতে পারে।

ইউনিটিতে জিওস্পেশিয়াল ক্রিয়েটর আপনাকে ইউনিটি এডিটরে জিওস্পেশিয়াল কন্টেন্টের পূর্বরূপ দেখতে দেয়। আমাদের কুইকস্টার্ট গাইড জিওস্পেশিয়াল স্রষ্টার সাথে পরিচয় করিয়ে দেয় এবং ইউনিটি এডিটর UI ব্যবহার করে ন্যূনতম প্রোগ্রামিং সহ আপনার প্রথম জিওস্পেশিয়াল-সক্ষম AR অভিজ্ঞতা কীভাবে তৈরি করতে হয় তা আপনাকে নির্দেশ করে। আরও উন্নত প্রকল্পগুলির জন্য, আপনি ইউনিটি এডিটর UI ব্যবহার করার পরিবর্তে জিওস্পেশিয়াল ক্রিয়েটর গেমঅবজেক্টগুলি প্রোগ্রাম্যাটিকভাবে তৈরি এবং ম্যানিপুলেট করতে চাইতে পারেন।

এই নির্দেশিকাটি অনুমান করে যে আপনি কুইকস্টার্টে প্রবর্তিত মৌলিক ভূ-স্থানীয় সৃষ্টিকর্তার ধারণাগুলির সাথে পরিচিত, এবং আপনি একটি দৃশ্যে ভূ-স্থানিক সৃষ্টিকর্তা অ্যাঙ্কর যুক্ত করা শুরু করতে প্রস্তুত৷ আপনার এপিআই কী, সেইসাথে আপনার দৃশ্যে প্রাথমিক এআর সেশন অবজেক্টের সাথে জিওস্পেশিয়াল ক্রিয়েটর সক্ষম এবং কনফিগার করা প্রয়োজন। স্ক্র্যাচ থেকে শুরু করলে, চালিয়ে যাওয়ার আগে "জিওস্পেশিয়াল ক্রিয়েটর সক্ষম করুন" বিভাগের মাধ্যমে এবং অন্তর্ভুক্ত করে কুইকস্টার্ট গাইড অনুসরণ করুন।

শুরু হচ্ছে

এই উদাহরণের জন্য, ধরুন আপনার কাছে সান ফ্রান্সিসকো, ক্যালিফোর্নিয়া, মার্কিন যুক্তরাষ্ট্রের সিটি হলের আশেপাশে পরিচিত অবস্থানগুলির একটি সেট রয়েছে, যেখানে আপনি AR সামগ্রী রাখতে চান৷ আপনাকে এই প্রতিটি স্থানে অ্যাঙ্কর অবজেক্ট তৈরি করতে হবে, এবং তারপর সেই অ্যাঙ্করগুলিতে মৌলিক জ্যামিতি সংযুক্ত করতে হবে।

আপনি অ্যাঙ্কর তৈরি করতে পারার আগে, আপনাকে একটি ARGeospatialCreatorOrigin নির্দিষ্ট করতে হবে, যা অক্ষাংশ, দ্রাঘিমাংশ এবং উচ্চতাকে ইউনিটি ওয়ার্ল্ড কোঅর্ডিনেটে এবং থেকে রূপান্তর করার জন্য একটি রেফারেন্স পয়েন্ট। উৎপত্তিতে একটি CesiumGeoreference subcomponent এবং একটি Cesium3DTileset চাইল্ড অবজেক্টও থাকবে, যা Cesium কে ইউনিটি এডিটরের দৃশ্য দৃশ্যে আশেপাশের এলাকা রেন্ডার করতে দেয়। এটির জন্য, কুইকস্টার্টে বর্ণিত একটি Google Map Tiles API কী প্রয়োজন

একটি মূল তৈরি করুন

জিওস্পেশিয়াল ক্রিয়েটরের জন্য এপিআই দৃশ্যে একটি ARGeospatialCreatorOrigin তৈরি করতে এবং প্রয়োজনীয় সিসিয়াম উপাদান যোগ করার জন্য একটি কারখানা পদ্ধতি অন্তর্ভুক্ত করে। নিম্নলিখিত কোডটি কাছাকাছি অক্ষাংশ, দ্রাঘিমাংশ এবং উচ্চতায় উৎপত্তি তৈরি করে এবং প্রদত্ত মানচিত্র টাইলস API কী ব্যবহার করে:

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

ডিফল্টরূপে, এই বস্তুটি ইউনিটি ওয়ার্ল্ড কোঅর্ডিনেটে (0, 0, 0) এ স্থাপন করা হয়, যা এই উদাহরণের জন্য ভাল কাজ করে।

ARAnchorManager রেফারেন্স পান

রানটাইমে ভূ-স্থানিক অ্যাঙ্করগুলি সমাধান করার জন্য একজন ARAnchorManager প্রয়োজন, তাই আপনার দৃশ্যে ARAnchorManager এর একটি রেফারেন্সও প্রয়োজন। আপনি যদি ARCore এক্সটেনশনের সাথে বান্ডিল করা জিওস্পেশিয়াল নমুনা অ্যাপ্লিকেশন দিয়ে শুরু করেন, তাহলে অ্যাঙ্কর ম্যানেজার "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

ধরুন আপনি আমাদের AR অ্যাপ্লিকেশনে এই প্রতিটি স্থানে, গ্রাউন্ড লেভেলে একটি করে এক মিটার কিউব রাখতে চান। নিম্নলিখিত কোডটি 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 অবজেক্টের সাপেক্ষে তাদের অবস্থান গণনা করে উপযুক্ত ইউনিটি ওয়ার্ল্ড কোঅর্ডিনেটে নোঙ্গর স্থাপন করেন। একটি ভূখণ্ড অ্যাঙ্করের উচ্চতা সামঞ্জস্য করতে, ভূখণ্ডের পৃষ্ঠের উপরে বা নীচে মিটারে Altitude বৈশিষ্ট্য সেট করুন।

রানটাইমে, টেরেন অ্যাঙ্করগুলি চলমান অ্যাপের জন্য গ্রাউন্ড লেভেলে সমাধান করবে, Altitude সম্পত্তি দ্বারা অফসেট। যদিও সম্পাদকের দৃশ্যের দৃশ্যে, তারা ডিফল্টরূপে 0 এর একটি WGS84 উচ্চতায় রেন্ডার করে, 3d টাইল জ্যামিতির সাথে আপেক্ষিক নয়। এটি প্রায়শই যেখানে আপনি সেগুলি দেখতে চান না, তাই আপনি UseEditorAltitudeOverride প্রপার্টিটিকে true সেট করে এবং EditorAltitudeOverride প্রপার্টি ব্যবহার করে WGS84 মিটারে উচ্চতা নির্দিষ্ট করে সম্পাদকের দৃশ্য দৃশ্যে অ্যাঙ্করের ডিফল্ট উচ্চতাকে ওভাররাইড করতে পারেন:

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

এই দুটি বৈশিষ্ট্য সম্পাদক মোডের বাইরে কোন প্রভাব নেই, এবং চলমান অ্যাপে কম্পাইল করা হয় না।

Geospatial Anchor in 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 মিটার।

Geospatial Anchor on the roof

একটি নির্দিষ্ট উচ্চতায় একটি নোঙ্গর তৈরি করুন

আমাদের চূড়ান্ত নোঙ্গরটি সিটি হলের গম্বুজের একেবারে শীর্ষে স্থাপন করা হবে। এই নোঙ্গরের জন্য, সুনির্দিষ্ট উচ্চতা গুরুত্বপূর্ণ, তাই আপনি ভূখণ্ড বা ছাদের অ্যাঙ্করের পরিবর্তে একটি 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 অনুযায়ী উচ্চতা ইতিমধ্যেই নির্দিষ্ট করা আছে। অবশ্যই, যদি সম্পাদকের মানচিত্র টাইলস জ্যামিতির উচ্চতা বাস্তব জগতের তুলনায় ভুল বলে প্রমাণিত হয়, আপনি এখনও দৃশ্যের দৃশ্যে নোঙ্গরটিকে পুনঃস্থাপন করতে সম্পাদক ওভাররাইড ব্যবহার করতে পারেন৷

Geospatial Anchor on the dome