คู่มือนี้อธิบายวิธีใช้ Geospatial Creator ในการเขียนสคริปต์ C#
เพื่อทำงานทั่วไปได้อย่างรวดเร็ว เช่น การสร้างและการย้าย
ออบเจ็กต์ ARGeospatialCreatorAnchor
รายการในโหมด Edit ของ Unity ซึ่งจะเป็นประโยชน์สำหรับ
การสร้าง Anchor หลายรายการจากรายการที่กำหนดไว้ล่วงหน้า เช่น สเปรดชีตหรือ KML
ผู้สร้างภูมิสารสนเทศใน Unity ช่วยให้คุณดูตัวอย่างเนื้อหาภูมิสารสนเทศใน ตัวแก้ไข Unity คู่มือเริ่มใช้งานฉบับย่อ แนะนำ Geospatial Creator และแนะนำคุณเกี่ยวกับวิธีสร้าง ประสบการณ์ AR ที่รองรับภูมิสารสนเทศด้วยการเขียนโปรแกรมเพียงเล็กน้อยโดยใช้ Unity UI ของ Editor คุณอาจต้องสร้างและจัดการโปรเจ็กต์ขั้นสูง GameObjects ของผู้สร้างภูมิสารสนเทศแบบเป็นโปรแกรมแทนการใช้ Unity UI ของ Editor
คู่มือนี้จะถือว่าคุณคุ้นเคยกับแนวคิดพื้นฐานสำหรับครีเอเตอร์ภูมิสารสนเทศ ซึ่งเปิดตัวใน Quickstart และคุณพร้อมแล้วที่จะเริ่มเพิ่มภูมิสารสนเทศ ครีเอเตอร์นำไปยังฉาก คุณจะต้องเปิดใช้งานผู้สร้างภูมิสารสนเทศและ กำหนดค่าด้วยคีย์ API รวมทั้งออบเจ็กต์เซสชัน AR เริ่มต้นใน ด้วย หากต้องเริ่มใหม่ตั้งแต่ต้น ให้ทำตามคู่มือเริ่มใช้งานฉบับย่อและ ซึ่งรวมถึง"เปิดใช้ภูมิสารสนเทศ Creator" ก่อนดำเนินการต่อ
เริ่มต้นใช้งาน
สำหรับตัวอย่างนี้ สมมติว่าคุณมีสถานที่ที่รู้จักกันรอบศาลากลางใน ซานฟรานซิสโก แคลิฟอร์เนีย สหรัฐอเมริกา ซึ่งคุณต้องการวางเนื้อหา AR คุณจะ สร้างวัตถุยึดที่แต่ละตำแหน่งเหล่านี้ จากนั้นแนบ เรขาคณิตกับแท็ก Anchor เหล่านั้น
ก่อนที่คุณจะสร้าง Anchor คุณควรระบุ
ARGeospatialCreatorOrigin
ซึ่งเป็นจุดอ้างอิงสำหรับการแปลง
ละติจูด ลองจิจูด และระดับความสูงไปยังและจากพิกัดโลกแบบ Unity
ต้นทางจะมีคอมโพเนนต์ย่อย CesiumGeoreference
และ
วัตถุลูก Cesium3DTileset
ซึ่งช่วยให้ซีเซียมแสดงผลรอบๆ ได้
ในมุมมองฉากของตัวแก้ไข Unity โดยต้องมี Google Maps
คีย์ API ของการ์ดตามที่อธิบายไว้ใน
การเริ่มต้นอย่างรวดเร็ว
สร้างต้นทาง
API สำหรับผู้สร้างภูมิสารสนเทศมีวิธีการจากโรงงานในการสร้าง
ARGeospatialCreatorOrigin
ในฉากและเพิ่มคอมโพเนนต์ Cesium ที่จำเป็น
โค้ดต่อไปนี้สร้างต้นทางที่ละติจูด ลองจิจูด และ
ระดับความสูง และการใช้คีย์ API ชิ้นส่วนแผนที่ที่กำหนด:
ARGeospatialCreatorOrigin origin =
GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");
โดยค่าเริ่มต้น อ็อบเจกต์นี้จะวางอยู่ที่ (0, 0, 0) ในพิกัดโลก Unity ซึ่ง เหมาะกับตัวอย่างนี้
ดูข้อมูลอ้างอิงของ ARAnchorManager
ARAnchorManager
ในการแก้ปัญหา Anchor เชิงพื้นที่ขณะรันไทม์
ต้องอ้างอิง ARAnchorManager
ในฉากด้วย หากคุณเริ่มต้นด้วย
แอปพลิเคชันตัวอย่างภูมิสารสนเทศที่มาพร้อมกับส่วนขยาย ARCore ซึ่งเป็นแท็ก Anchor
เครื่องมือจัดการจะแนบอยู่กับ "ต้นทางเซสชัน AR" GameObject. สมมติว่าคุณมี
แค่เครื่องมือจัดการแท็กเดียวในฉากของคุณ คุณก็จะได้รับการอ้างอิงถึงแท็ก เช่น
ดังนี้
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
เมื่อมีต้นทางและเครื่องมือจัดการแท็ก Anchor แล้ว คุณก็เริ่มสร้าง
ออบเจ็กต์ ARGeospatialCreatorAnchor
รายการ
สร้างตัวยึดภูมิประเทศ
พิจารณาอาร์เรย์ 2 มิติต่อไปนี้ของค่า double
โดยจะแสดง
ละติจูดและลองจิจูดที่แม่นยำที่จุด 3 จุดทางฝั่งตะวันออกของ
ศาลาว่าการเมืองในซานฟรานซิสโก แคลิฟอร์เนีย สหรัฐอเมริกา
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;
}
วิธีนี้จะสร้างตัวยึดภูมิประเทศในแต่ละจุด ผู้สร้างภูมิสารสนเทศโดยอัตโนมัติ
วางหมุดบนพิกัดโลก Unity ที่เหมาะสม โดยการคำนวณ
ตำแหน่งที่สัมพันธ์กับออบเจ็กต์ ARGeospatialCreatorOrigin
หากต้องการปรับ
ระดับความสูงของจุดยึดภูมิประเทศ ตั้งค่าคุณสมบัติ Altitude
เป็นเมตรด้านบนหรือ
ใต้พื้นผิวภูมิประเทศ
ขณะรันไทม์ ตัวยึดภูมิประเทศจะแก้ไขที่ระดับพื้นดินสำหรับแอปที่กำลังวิ่ง
ชดเชยด้วยพร็อพเพอร์ตี้ Altitude
แต่ในมุมมองฉากของเครื่องมือแก้ไข
แสดงผลที่ระดับความสูง WGS84 ที่ 0 โดยค่าเริ่มต้น ซึ่งไม่สัมพันธ์กับไทล์ 3 มิติ
เรขาคณิต ซึ่งมักจะไม่ใช่ตำแหน่งที่คุณต้องการเห็น ดังนั้นคุณสามารถแทนที่
ระดับความสูงเริ่มต้นของจุดยึดในมุมมองฉากของเครื่องมือแก้ไขโดยการตั้งค่า
พร็อพเพอร์ตี้ UseEditorAltitudeOverride
กับ true
และระบุระดับความสูงใน
WGS84 เมตรโดยใช้พร็อพเพอร์ตี้ EditorAltitudeOverride
:
anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza
คุณสมบัติทั้งสองนี้จะไม่มีผลนอกโหมด Editor และไม่ได้ ที่คอมไพล์ลงในแอปที่ทำงานอยู่
สร้างจุดยึดบนชั้นดาดฟ้า
สำหรับจุดยึดถัดไปของเรา สมมติว่าคุณต้องการปักหมุดไว้ที่ชั้นดาดฟ้าของเมือง
ฮอลล์ คุณสร้าง Anchor ได้ในลักษณะเดียวกัน ยกเว้น 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;
คุณสามารถปรับระดับความสูงของหลังคาได้เช่นเดียวกับตัวยึดภูมิประเทศ
โฆษณา Anchor ในมุมมองฉากของเครื่องมือแก้ไขโดยใช้ 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 แล้ว แน่นอนว่าถ้าความสูงของชิ้นส่วนแผนที่ เรขาคณิตในเครื่องมือแก้ไขไม่ถูกต้อง เมื่อเทียบกับโลกจริง คุณยังสามารถใช้การลบล้างตัวแก้ไขเพื่อเปลี่ยนตำแหน่ง Anchor ในฉาก