Panduan ini menjelaskan cara menggunakan Geospatial Creator untuk menulis skrip C#
agar dapat menyelesaikan tugas umum dengan cepat, seperti membuat dan memindahkan
objek ARGeospatialCreatorAnchor
dalam mode Edit Unity. Hal ini dapat berguna untuk membuat beberapa anchor dari daftar standar seperti spreadsheet atau file KML.
Geospatial Creator di Unity memungkinkan Anda melihat pratinjau konten Geospasial di Unity Editor. Panduan Memulai kami memperkenalkan Geospatial Creator dan memandu Anda mempelajari cara membangun pengalaman AR pertama Anda yang berkemampuan Geospasial dengan pemrograman minimal, menggunakan UI Unity Editor. Untuk project yang lebih canggih, sebaiknya Anda membuat dan memanipulasi GameObject Geospatial Creator secara terprogram, bukan menggunakan UI Unity Editor.
Panduan ini mengasumsikan bahwa Anda telah memahami konsep dasar Geospatial Creator yang diperkenalkan dalam Panduan Memulai, dan Anda siap untuk mulai menambahkan anchor Geospatial Creator ke sebuah scene. Anda harus mengaktifkan dan mengonfigurasi Geospatial Creator dengan kunci API, serta objek sesi AR awal dalam scene Anda. Jika memulai dari awal, ikuti panduan Memulai dan sertakan bagian "Enable Geospatial Creator" sebelum melanjutkan.
Memulai
Untuk contoh ini, misalnya Anda memiliki sekumpulan lokasi yang diketahui di sekitar Balai Kota di San Francisco, California, AS, tempat Anda ingin menempatkan konten AR. Anda harus membuat objek anchor di setiap lokasi ini, lalu melampirkan geometri dasar ke anchor tersebut.
Sebelum dapat membuat anchor, Anda harus menentukan
ARGeospatialCreatorOrigin
, yang merupakan titik referensi untuk mengonversi
lintang, bujur, dan ketinggian ke dan dari koordinat dunia Unity.
Origin juga akan berisi subkomponen CesiumGeoreference
dan
objek turunan Cesium3DTileset
, yang memungkinkan Cesium merender area
sekitarnya dalam tampilan Scene editor Unity. Untuk melakukannya, Anda memerlukan kunci API Kartu Google Maps seperti yang dijelaskan di Panduan Memulai
Membuat Origin
API for Geospatial Creator menyertakan metode factory untuk membuat
ARGeospatialCreatorOrigin
dalam scene dan menambahkan komponen Cesium yang diperlukan.
Kode berikut membuat tempat asal pada lintang, bujur, dan ketinggian di sekitar, dan menggunakan kunci Map Tiles API yang diberikan:
ARGeospatialCreatorOrigin origin =
GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");
Secara default, objek ini ditempatkan pada (0, 0, 0) pada koordinat dunia Unity, yang berfungsi dengan baik untuk contoh ini.
Mendapatkan Referensi ARAnchorManager
ARAnchorManager
diperlukan untuk me-resolve anchor geospasial saat runtime, sehingga Anda
juga memerlukan referensi ke ARAnchorManager
dalam scene. Jika Anda mulai dengan
aplikasi Contoh Geospasial yang dipaketkan dengan Ekstensi ARCore, Anchor
Manager akan dilampirkan ke GameObject "Asal Sesi AR". Dengan asumsi bahwa Anda memiliki
tepat satu pengelola anchor di scene, Anda bisa mendapatkan referensi seperti ini:
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
Setelah memiliki origin dan pengelola anchor, Anda dapat mulai membuat
objek ARGeospatialCreatorAnchor
.
Membuat Anchor Medan
Pertimbangkan array dua dimensi dari nilai double
berikut, yang mewakili lintang dan bujur yang tepat pada tiga titik di sisi timur City Hall di San Francisco, California, AS:
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
Misalkan Anda ingin menempatkan kubus berukuran satu meter di setiap lokasi ini, di permukaan tanah, dalam aplikasi AR kita. Kode berikut membuat
objek ARGeospatialCreatorAnchor
dan menetapkan propertinya ke
nilai yang sesuai:
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;
}
Tindakan ini akan membuat anchor medan di setiap titik. Geospatial Creator secara otomatis
menempatkan anchor pada koordinat dunia Unity yang sesuai, dengan menghitung
lokasinya secara relatif terhadap objek ARGeospatialCreatorOrigin
. Untuk menyesuaikan
ketinggian anchor medan, tetapkan properti Altitude
dalam meter di atas atau
di bawah permukaan medan.
Saat runtime, anchor medan akan me-resolve di permukaan tanah untuk aplikasi yang sedang berjalan,
diganti oleh properti Altitude
. Namun, dalam tampilan scene Editor, objek tersebut
dirender pada ketinggian WGS84 0 secara default, tidak relatif terhadap geometri ubin
3d. Ini sering kali bukan di tempat yang Anda inginkan, sehingga Anda dapat mengganti
ketinggian default anchor di tampilan scene Editor dengan menetapkan
properti UseEditorAltitudeOverride
ke true
dan menentukan ketinggian dalam
WGS84 meter menggunakan properti EditorAltitudeOverride
:
anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza
Kedua properti ini tidak memiliki efek di luar mode Editor, dan tidak dikompilasi ke dalam aplikasi yang berjalan.
Membuat anchor atap
Untuk anchor berikutnya, misalkan Anda ingin menempatkan anchor di rooftop Hall
Kota. Anchor dapat dibuat dengan cara yang sama persis, tetapi properti AltitudeType
disetel ke 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;
Serupa dengan anchor medan, Anda dapat menyesuaikan ketinggian anchor atap dalam tampilan scene Editor menggunakan properti UseEditorAltitudeOverride
dan EditorAltitudeOverride
. Untuk contoh ini, ketinggian atap
WGS84 sekitar 10,7 meter.
Membuat anchor pada ketinggian tertentu
Jangkar terakhir kita akan ditempatkan di bagian paling atas kubah Balai Kota. Untuk anchor ini, ketinggian yang akurat sangat penting, jadi Anda akan menetapkannya secara eksplisit menggunakan anchor WGS84, bukan anchor atau medan atau anchor atap:
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;
Anda tidak perlu menggunakan penggantian ketinggian khusus editor, karena ketinggian sudah ditentukan menurut WGS84. Tentu saja, jika tinggi geometri Peta Ubin di editor ternyata salah dibandingkan dengan yang sebenarnya, Anda masih dapat menggunakan penggantian editor untuk memosisikan ulang anchor dalam tampilan scene.