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