Turinys:

AR objektų įdėjimas į GPS koordinates išplėstinėje realybėje: 8 žingsniai (su nuotraukomis)
AR objektų įdėjimas į GPS koordinates išplėstinėje realybėje: 8 žingsniai (su nuotraukomis)

Video: AR objektų įdėjimas į GPS koordinates išplėstinėje realybėje: 8 žingsniai (su nuotraukomis)

Video: AR objektų įdėjimas į GPS koordinates išplėstinėje realybėje: 8 žingsniai (su nuotraukomis)
Video: GPS sekimas istorijos peržiūra, gps trekeris 2024, Liepa
Anonim
AR objektų įdėjimas į GPS koordinates papildytoje realybėje
AR objektų įdėjimas į GPS koordinates papildytoje realybėje

Ši instrukcija ketina sukurti mobiliąją programą, skirtą AR objektams išdėstyti pagal GPS koordinates, naudojant „ARkit“ir „ARCore“naudojant „Unity3D“. Aš jums padėsiu sukurti projektą, kurį sukūriau naudodamas „Mapbox“, kuris leidžia mums pažymėti pranešimus tam tikrose GPS vietose ir įrašyti juos į „GameSparks“duomenų bazę.

Visa programinė įranga ir projektai, kuriuos čia naudosime, yra nemokami.

Atsisiųskite „Unity 3D“čia, jei dar neturite:

unity3d.com/

1 žingsnis: kliūtys…

Kliūtys…
Kliūtys…

Taigi tai nėra lengviausia programa, atsižvelgiant į dabartinius mobiliojo GPS ir mobiliojo kompaso apribojimus.

Tiesą sakant, objektai pasirodo ten, kur jie turėtų būti, apie 50% laiko. Taigi rezultatai nėra puikūs, tačiau jie tampa tikslesni, kuo arčiau objektų.

Bet kuriuo atveju manau, kad šiuo metu geresnis būdas GPS pagrįstam AR būtų naudoti žemėlapį, kaip tai daro „Pokemon go“, o kai priartėjate prie objekto, fotoaparatas atsidaro ir matote tik tą objektą priešais save. Ateityje norėčiau atlikti visą pamoką apie paprastesnį tokį įgyvendinimą.

Bet kuriuo atveju aš anksčiau naudoju „Mapbox“ir žinau, kad jie turi konvertavimo klasę, kuri turi funkcijas, skirtas GPS koordinates paversti „Unity“pasaulio koordinatėmis. Maniau, kad galiu tiesiog įvesti kai kurias GPS koordinates ir jos pasirodys ten, kur noriu. Neveikė.

Objektai rodomi teisingai vienas kito atžvilgiu, tačiau jie niekada nebuvo tinkamoje vietoje. Taigi aš padariau keletą tyrimų ir sužinojau, kad mano „Unity“kamera turi būti suderinta su tikra šiaurė, kad objektai būtų rodomi tinkamoje vietoje.

Problema ta, kad jūsų telefono kompasas niekada nėra visiškai tikslus.

2 žingsnis: kvailas kompasas

Kvailas kompasas
Kvailas kompasas
Kvailas kompasas
Kvailas kompasas

Pagrindinė problema yra ta, kad kai jūs dedate objektus toli nuo fotoaparato, jei jūsų telefono idėja apie tikrąją šiaurę yra net keliais laipsniais, tolumoje esantys objektai pasirodys labai toli.

Aš beveik atsisakiau šios įmonės, bet draugas man papasakojo apie šį „GitHub“projektą:

github.com/mapbox/mapbox-ar-unity

Tai bandymas atlikti „pasaulinio masto“AR iš „Mapbox“, kur objektai yra pritvirtinti prie GPS koordinačių, kad išplėstosios realybės patirtis galėtų veikti lauke dideliais atstumais, o ne tik mažame jūsų namo kambaryje.

Jų projekte naudojamos AR padėties deltos ir GPS padėties deltos, kad būtų galima apskaičiuoti kampą, kuris yra poslinkis nuo AR kameros iki tikrosios šiaurės. Taigi iš esmės paimkite vieną GPS nuskaitymą, kai vartotojas paleidžia programą, ir leiskite jiems vaikščioti tiesia linija ir dar kartą nuskaityti GPS. Tada naudodami šiuos du taškus galite pasakyti, kuria kryptimi tas žmogus ėjo (darant prielaidą, kad jo fotoaparatas yra nukreiptas ta kryptimi, kuria jis eina). Jie nustatė, kad tai tiksliau nei naudojant kompasą telefone.

Kita problema, kurią jie bando išspręsti, yra dreifas naudojant „ARkit“. Stebėti galima mažoje patalpoje, bet kai lauke vaikštote didelius atstumus, AR objektai nutolsta toli nuo to, kur jie turėtų būti.

3 žingsnis: Pagaliau sprendimas

Pagaliau sprendimas!
Pagaliau sprendimas!

Taigi šis „Mapbox“projektas pasiūlė būdą gauti patikimą atsukimo kryptį, palyginti su tikra šiaurė, todėl beliko tik pastatyti objektus pasaulyje.

Galiausiai šiek tiek išplėtiau šį pavyzdį, kad galėčiau pažymėti tekstinį pranešimą tam tikroje GPS vietoje ir tada parašyti šią informaciją į „GameSparks“duomenų bazę. Štai ką aš jums parodysiu, kaip naudotis.

Vienintelė šio projekto problema yra ta, kad prieš pradėdami jį naudoti turite gerai suderinti.

Turiu omenyje lygiavimą, nes kadangi „Mapbox“naudoja pozicijos deltas, kad apskaičiuotų kryptį, kai pirmą kartą atidarote programą ir turite įsitikinti, kad aptinkama įžeminimo plokštuma, o tada kurį laiką eikite tiesia linija, kol bus apskaičiuotas tinkamas lygiavimas.

Šia prasme UX yra dar viena kliūtis, tačiau projekto patobulinimuose jie pateikia pavyzdį, kaip kubeliai dedami priešais vartotoją, kad būtų galima gerai suderinti.

Taigi dabar, kai žinote šio projekto apribojimus, leiskite man parodyti, kaip juo naudotis, kad vaikinai galėtų žaisti. Galų gale turėsite sukurti „Mapbox“paskyrą ir „Gamesparks“paskyrą, kurios abi yra nemokamos. Aš naudoju žaidimų parkus tik tam, kad galėčiau kažkur išsaugoti GPS koordinates, nes bandymų metu jūs gana dažnai iš naujo paleisite ir atkursite programą.

Be to, tai turėtų veikti tiek su „ARkit“, tiek su „ARcore“, tačiau šiuo metu turiu tik „iPhone“, todėl tai buvo viskas, ką galėjau išbandyti.

4 veiksmas: leiskite programai veikti

Leiskite programai veikti!
Leiskite programai veikti!

Pirmiausia atsisiųskite šį projektą iš „GitHub“:

Išsaugokite failą darbalaukyje ir atidarykite jį „Unity“.

Eikite į failą, sukurkite nustatymus ir perjunkite platformą į „Android“arba „IOS“.

Dabar eikite į „Mapbox.com“ir sukurkite paskyrą, jei jos dar neturite.

Griebkite savo API raktą ir grįžkite į „Unity“, viršuje spustelėkite skirtuką „Mapbox“ir spustelėkite konfigūruoti. Ten įklijuokite savo API raktą.

Dabar sukurkite paskyrą „GameSparks.com“ir spustelėkite mygtuką viršuje dešinėje, kad sukurtumėte naują programą.

Pavadinkite tai kaip norite ir nukopijuokite savo API raktą ir programos paslaptį. Grįžkite į „Unity“ir viršuje raskite skirtuką „GameSparks“. Spustelėkite konfigūruoti ir ten įklijuokite savo kredencialus.

5 veiksmas: sukonfigūruokite „GameSparks“

Konfigūruokite „GameSparks“
Konfigūruokite „GameSparks“

Dabar, kol programa pradės veikti, turime sukonfigūruoti savo duomenų bazę.

„GameSparks“naudoja „noSQL“, todėl pirmiausia turime sukurti kolekciją ir pridėti įvykius, kuriuos mūsų programa naudoja skaityti, rašyti ir ištrinti iš serverio.

Pirmiausia sukurkite naują kolekciją „GameSparks“svetainėje ir vadinkite ją, kaip norite.

Dabar turime sukurti 3 įvykius.

Pirmas dalykas, kurį programa turi padaryti, yra parašyti pranešimo objektą į duomenų bazę.

Pranešimas turi platumą, ilgumą ir tada pranešimo tekstą.

Taigi eikite į konfigūratorių ir pridėkite naują įvykį. Sukurkite trumpąjį kodą „SAVE_GEO_MESSAGE“.

Įveskite viską, ko norite pavadinimui ir aprašymui.

Pridėkite trumpą 3 atributų kodą:

"LAT" "LON"

„TEXT“

Kiekvieną duomenų tipą nustatykite kaip eilutę ir numatytąją reikšmę nustatykite į 0. Nustatykite, kad kiekvieno iš jų sumavimo tipas būtų „naudojamas scenarijuje“.

6 veiksmas: pridėkite paskutinius įvykius…

Pridėkite paskutinius įvykius…
Pridėkite paskutinius įvykius…

Programa taip pat turi įkelti visus pranešimus iš duomenų bazės ir nuskaityti juos į „Unity“, kai programa paleidžiama, kad galėtume patalpinti duomenų bazėje saugomus AR pranešimus.

Sukurkite kitą įvykį ir pavadinkite jį „LOAD_MESSAGE“

Šiam įvykiui nereikia jokių atributų. Vėlgi, pavadinimui ir aprašymui padėkite viską, ko norite.

Atlikite tą patį kitą įvykį ir pavadinkite jį „REMOVE_MESSAGES“

Tam net nereikia jokių atributų.

Dabar paskutinis dalykas, kurį turime padaryti, yra pridėti „debesies kodą“arba serverio pusės kodą, kuris iškviečiamas, kai kiekvienas įvykis pradedamas iš mūsų programos.

7 veiksmas: pridėkite debesies kodą

„GameSparks“eikite į konfigūratorių ir debesies kodą.

Prie kiekvieno ką tik įvykusio įvykio turime pridėti scenarijų.

Į įvykį LOAD_MESSAGE pridėkite šį kodą ir išsaugokite:

var messageData = Spark.runtimeCollection ("GeoMessage");

var kursorius = messageData.find ();

var allMessages = ;

while (cursor.hasNext ()) {

var obj = žymeklis.kitas ();

ištrinti (obj ["_id"]);

allMessages.push (obj);

}

Spark.setScriptData ("all_Messages", allMessages); // grąžinti visus duomenis

Į įvykį REMOVE_MESSAGES pridėkite šį kodą:

var messageData = Spark.runtimeCollection ("GeoMessage");

messageData.remove ({});

Galiausiai įvykyje SAVE_MESSAGES pridėkite:

var geoMessageList = Spark.runtimeCollection ("GeoMessage");

var messageLat = Spark.getData (). LAT;

var messageLon = Spark.getData (). LON;

var messageText = Spark.getData (). TEXT;

var currentMessage = {

"messLat": messageLat,

"messLon": messageLon,

"messText": messageText,

};

geoMessageList.insert (currentMessage);

8 žingsnis: MES ATLIKTA

MES BAIGĖME!
MES BAIGĖME!

Šis projektas naudoja unikalų jūsų įrenginio ID autentifikuodamas „GameSparks“serverį, kad dabar galėtumėte grįžti į „Unity“ir spustelėti „Play“, o konsolėje turėtumėte matyti „įrenginys autentifikuotas …“

Dabar eikite į failą, sukurkite nustatymus ir spustelėkite kurti. Jei niekada nesukūrėte programos, skirtos „Android“ar „IOS“, gali tekti sukurti kūrimo paskyrą „Google“arba „Apple“.

Kai programa yra jūsų telefone, pirmiausia turite įsitikinti, kad ARKit arba ARCore aptinka įžeminimo plokštumą. Dabar spustelėkite žurnalo mygtuką apatiniame kairiajame kampe. Eikite į priekį kelis žingsnius ir pamatysite šviesiai mėlyną „apskaičiuotą derinimą“. Dabar turėtų būti rodomi vartotojo sąsajos mygtukai ir, jei į jūsų duomenų bazę bus įkelti pranešimai, jie bus patalpinti į pasaulį.

Norėdami pažymėti naują GPS AR pranešimą kažkur, eikite į norimą pranešimą ir spustelėkite pranešimo piktogramą ekrano viršuje, dešinėje. Įveskite bet kokį norimą pranešimą ir spustelėkite smeigtuko mygtuką!

Rekomenduojamas: