Panduan ini menjelaskan cara menggunakan Geospatial Creator untuk menulis skrip C#
guna 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 yang telah ditentukan sebelumnya 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 cara mem-build pengalaman AR yang mendukung Geospasial pertama Anda dengan pemrograman minimal, menggunakan UI Editor Unity. Untuk project yang lebih canggih, Anda dapat membuat dan memanipulasi GameObject Geospatial Creator secara terprogram, bukan menggunakan UI Editor Unity.
Panduan ini mengasumsikan bahwa Anda sudah memahami konsep dasar Geospatial Creator yang diperkenalkan di Mulai Cepat, dan Anda siap untuk mulai menambahkan anchor Geospatial Creator ke tampilan. Anda harus mengaktifkan dan mengonfigurasi Geospatial Creator dengan kunci API, serta objek sesi AR awal di tampilan. Jika memulai dari awal, ikuti panduan Mulai Cepat hingga selesai, termasuk bagian "Aktifkan Geospatial Creator" sebelum melanjutkan.
Memulai
Untuk contoh ini, misalkan Anda memiliki sekumpulan lokasi yang diketahui di sekitar Balai Kota di San Francisco, California, Amerika Serikat, 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.
Asal juga akan berisi subkomponen CesiumGeoreference
dan
objek turunan Cesium3DTileset
, yang memungkinkan Cesium merender area
di sekitarnya dalam tampilan Scene editor Unity. Untuk melakukannya, Anda memerlukan kunci Google Maps
Tiles API seperti yang dijelaskan dalam
Panduan Memulai
Membuat Origin
API untuk Geospatial Creator menyertakan metode factory untuk membuat
ARGeospatialCreatorOrigin
dalam tampilan dan menambahkan komponen Cesium yang diperlukan.
Kode berikut membuat asal pada lintang, bujur, dan ketinggian terdekat, serta 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 di (0, 0, 0) dalam koordinat dunia Unity, yang berfungsi baik untuk contoh ini.
Mendapatkan Referensi ARAnchorManager
ARAnchorManager
diperlukan untuk me-resolve anchor geospasial saat runtime, sehingga Anda
juga memerlukan referensi ke ARAnchorManager
dalam tampilan. Jika Anda memulai dengan
aplikasi Geospatial Sample yang dipaketkan dengan ARCore Extensions, Pengelola
Anchor akan dilampirkan ke GameObject "AR Session Origin". Dengan asumsi Anda memiliki
tepat satu pengelola anchor di tampilan, Anda bisa mendapatkan referensinya seperti
ini:
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
Setelah memiliki origin dan pengelola anchor, Anda dapat mulai membuat objek ARGeospatialCreatorAnchor
.
Membuat anchor Terrain
Pertimbangkan array dua dimensi nilai double
berikut, yang mewakili
lintang dan bujur yang tepat di 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 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 di koordinat dunia Unity yang sesuai, dengan menghitung
lokasinya 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 di-resolve di tingkat dasar untuk aplikasi yang sedang berjalan,
diimbangi dengan properti Altitude
. Namun, dalam tampilan scene Editor, objek tersebut
dirender pada ketinggian WGS84 0 secara default, bukan relatif terhadap geometri ubin 3D. Ini sering kali bukan tempat yang Anda inginkan untuk melihatnya, sehingga Anda dapat mengganti ketinggian default anchor di tampilan scene Editor dengan menetapkan properti UseEditorAltitudeOverride
ke true
dan menentukan ketinggian dalam meter WGS84 menggunakan properti EditorAltitudeOverride
:
anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza
Kedua properti ini tidak berpengaruh di luar mode Editor, dan tidak dikompilasi ke dalam aplikasi yang sedang berjalan.
Membuat anchor atap
Untuk anchor berikutnya, misalkan Anda ingin menempatkan anchor di atap City Hall. Anchor dapat dibuat dengan cara yang sama persis, kecuali properti AltitudeType
ditetapkan 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 rumah
di tampilan scene Editor menggunakan properti UseEditorAltitudeOverride
dan
EditorAltitudeOverride
. Untuk contoh ini, ketinggian atap WGS84
adalah sekitar 10,7 meter.
Membuat anchor di ketinggian tertentu
Anchor terakhir kita akan ditempatkan di bagian paling atas kubah Balai Kota. Untuk anchor ini, ketinggian yang tepat sangat penting, sehingga Anda akan menetapkannya secara eksplisit dengan menggunakan anchor WGS84, bukan anchor medan atau 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 sesuai dengan WGS84. Tentu saja, jika tinggi geometri Kartu Peta di editor ternyata salah dibandingkan dengan dunia nyata, Anda masih dapat menggunakan penggantian editor untuk memosisikan ulang anchor dalam tampilan tampilan.