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