INHOUDSOPGAWE:

Plaas AR -voorwerpe by GPS -koördinate in Augmented Reality: 8 stappe (met foto's)
Plaas AR -voorwerpe by GPS -koördinate in Augmented Reality: 8 stappe (met foto's)

Video: Plaas AR -voorwerpe by GPS -koördinate in Augmented Reality: 8 stappe (met foto's)

Video: Plaas AR -voorwerpe by GPS -koördinate in Augmented Reality: 8 stappe (met foto's)
Video: Томас Кэмпбелл: Эго, паранормальные пси, мой большой палец на ноге 2024, November
Anonim
Plaas AR -voorwerpe by GPS -koördinate in Augmented Reality
Plaas AR -voorwerpe by GPS -koördinate in Augmented Reality

Hierdie instruksies gaan oor om 'n mobiele app te maak om AR -voorwerpe op GPS -koördinate te plaas met ARkit en ARCore met behulp van Unity3D. Ek lei u deur die opstel van 'n projek wat ek gemaak het met behulp van Mapbox waarmee ons boodskappe op spesifieke GPS -plekke kan merk en dit na 'n GameSparks -databasis kan skryf.

Al die sagteware en projekte wat ons hier sal gebruik, is gratis.

Laai Unity 3D hier af as u dit nog nie het nie:

unity3d.com/

Stap 1: Hekkies …

Hekkies…
Hekkies…

Dit is dus nie die maklikste app om te maak met die huidige beperkings op mobiele GPS en mobiele kompas nie.

Om eerlik te wees, verskyn die voorwerpe waar dit ongeveer 50% van die tyd behoort te wees. Die resultate is dus nie wonderlik nie, maar hulle word wel akkurater namate u die voorwerpe nader.

Hoe dan ook, ek dink 'n beter manier om op GPS gebaseerde AR op hierdie punt te wees, is om 'n kaart te gebruik soos pokemon go doen, en as u naby 'n voorwerp kom, word die kamera oopgemaak en sien u slegs die voorwerp voor u. In die toekoms wil ek 'n volledige handleiding doen oor 'n eenvoudiger implementering soos hierdie.

Hoe dan ook, ek het al voorheen Mapbox gebruik en ek weet dat hulle 'n omskakelingsklas het wat funksies het om GPS -koördinate om te skakel na Unity -wêreldkoördinate. Ek het gedink ek kan net 'n paar GPS -koördinate deurgee, en dit sal verskyn waar ek dit wil hê. Het nie gewerk nie.

Die voorwerpe verskyn korrek ten opsigte van mekaar, maar hulle was nooit op die regte plek nie. Ek het dus 'n bietjie navorsing gedoen en gevind dat my Unity -kamera in lyn moet wees met die ware noorde sodat die voorwerpe op die regte plek kan verskyn.

Die probleem is dat die kompas in u telefoon nooit heeltemal akkuraat is nie.

Stap 2: Dom kompas

Dom kompas
Dom kompas
Dom kompas
Dom kompas

Die grootste probleem is wanneer u voorwerpe ver van die kamera af plaas, as u selfoon se idee van ware noord selfs 'n paar grade is, sal voorwerpe in die verte baie ver weg verskyn.

Ek het hierdie onderneming amper opgegee, maar 'n vriend het my vertel van hierdie GitHub -projek:

github.com/mapbox/mapbox-ar-unity

Dit is 'n poging om 'wêreldwye' AR te doen vanaf Mapbox, waar voorwerpe aan GPS -koördinate geanker is, sodat Augmented Reality -ervarings buite oor lang afstande buite kan werk in plaas van net in 'n klein kamer in u huis.

Hul projek gebruik AR Position deltas en GPS Position deltas om 'n hoek te bereken wat die offset is van die AR kamera na ware noord. Neem dus basies een GPS -lesing wanneer die gebruiker die app begin, en laat hulle in 'n reguit lyn loop en weer 'n GPS -lesing neem. Dan kan u met hierdie twee punte weet watter rigting daardie persoon gestap het (as hulle kamera in die rigting wys). Hulle het gevind dat dit meer akkuraat was as om die kompas op die telefoon te gebruik.

Die ander probleem wat hulle probeer oplos, is die wegdrywing met ARkit. Opsporing is goed in 'n klein kamer, maar as u buite lang afstande loop, dryf AR -voorwerpe ver weg van waar hulle veronderstel is om te wees.

Stap 3: Uiteindelik 'n oplossing

Uiteindelik 'n oplossing!
Uiteindelik 'n oplossing!

Hierdie Mapbox -projek bied dus 'n manier om 'n betroubare rigting in die rigting van die ware noorde te kry, en al wat oorgebly het, is om net die voorwerpe in die wêreld te plaas.

Uiteindelik het ek hierdie voorbeeld 'n bietjie uitgebrei, sodat ek 'n teksboodskap op 'n spesifieke GPS -plek kon merk en die inligting dan na 'n GameSparks -databasis kon skryf. Dit is wat ek jou gaan wys hoe om dit te gebruik.

Die enigste probleem met hierdie projek is dat u 'n goeie belyning moet kry voordat dit gebruik kan word.

Wat ek met belyning bedoel, is dat aangesien Mapbox posisie -delta's gebruik om die koers te bereken, as u die app eers oopmaak en moet seker maak dat 'n grondvlak opgespoor word en dan 'n rukkie in 'n reguit lyn loop totdat 'n behoorlike belyning bereken is.

In hierdie sin is UX nog 'n struikelblok, maar in die verbeterings van die projek gee hulle 'n voorbeeld van die plaas van kubusse voor die gebruiker om deur te loop om 'n goeie belyning te verseker.

Noudat u die beperkings van hierdie projek ken, laat ek u wys hoe u dit kan gebruik, sodat ouens kan speel. U moet uiteindelik 'n mapbox -rekening en 'n speletjiesparks -rekening skep, wat albei gratis is. Ek het speletjiesparke gebruik net sodat ek êrens GPS -koördinate kon stoor, want tydens die toets begin u die app gereeld en herbou.

Dit behoort ook met ARkit en ARcore te werk, maar ek het op die oomblik slegs 'n iPhone, sodat ek dit net kon toets.

Stap 4: laat die app werk

Laat die app werk!
Laat die app werk!

Laai hierdie projek eers van GitHub af:

Stoor die lêer op u lessenaar en maak dit oop in Unity.

Gaan na die lêer, bou instellings en skakel u platform oor na Android of IOS.

Gaan nou na Mapbox.com en skep 'n rekening as u nog nie een het nie.

Gryp u API -sleutel en gaan terug na Unity, klik op die Mapbox -oortjie bo -aan en klik op configure. Plak u API -sleutel daar in.

Skep nou 'n rekening op GameSparks.com en klik op die knoppie regs bo om 'n nuwe app te skep.

Noem dit net soos u wil en kopieer u API -sleutel en appgeheim. Gaan terug na Unity en vind die oortjie GameSparks bo -aan. Klik op configure en plak u geloofsbriewe ook daarin.

Stap 5: Stel GameSparks op

Stel GameSparks op
Stel GameSparks op

Nou voordat die app werk, moet ons ons databasis opstel.

GameSparks gebruik noSQL, dus moet ons eers 'n versameling skep en die gebeurtenisse byvoeg wat ons app gebruik om te lees, te skryf en te verwyder van die bediener.

Skep eers 'n nuwe versameling op die GameSparks -webwerf en noem dit wat u wil.

Nou moet ons 3 geleenthede skep.

Die eerste ding wat die app moet doen, is om 'n boodskapvoorwerp in die databasis te skryf.

'N Boodskap het 'n breedtegraad, lengtegraad en dan die teks van die boodskap.

Gaan dus na die konfigurator en voeg 'n nuwe geleentheid by. Maak die kort kode "SAVE_GEO_MESSAGE".

Plaas wat u wil vir die naam en beskrywing.

Voeg die kort kode vir 3 eienskappe by:

"LAT" "LON"

"TEKS"

Stel elke datatipe op string en stel die standaardwaarde op 0. Stel die standaard aggregatietipe van elkeen op "used in script".

Stap 6: Voeg die finale geleenthede by …

Voeg die finale geleenthede by …
Voeg die finale geleenthede by …

Die app moet ook al die boodskappe van die databasis laai en in Unity lees wanneer die app begin, sodat ons 'n AR -boodskap kan plaas wat in die databasis gestoor is.

Skep 'n ander geleentheid en noem dit "LOAD_MESSAGE"

Hierdie gebeurtenis benodig geen kenmerke nie. Sit weer wat u wil vir die naam en beskrywing.

Doen dieselfde vir 'n ander geleentheid en noem dit "REMOVE_MESSAGES"

Dit het selfs geen eienskappe nodig nie.

Die laaste ding wat ons moet doen, is om 'n "wolkkode" of 'n bedienerkantkode by te voeg wat gebel word wanneer elke gebeurtenis vanaf ons app begin.

Stap 7: Voeg die wolkkode by

Gaan in GameSparks na die konfigurator en wolkkode.

Ons moet 'n skrif by elke gebeurtenis wat ons pas gemaak het, byvoeg.

Voeg hierdie kode by die LOAD_MESSAGE -gebeurtenis en stoor dit:

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

var cursor = messageData.find ();

var allMessages = ;

terwyl (cursor.hasNext ()) {

var obj = cursor.next ();

delete (obj ["_id"]);

allMessages.push (obj);

}

Spark.setScriptData ("all_Messages", allMessages); // stuur alle data terug

Voeg hierdie kode by die REMOVE_MESSAGES -gebeurtenis:

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

messageData.remove ({});

Voeg laastens in die SAVE_MESSAGES -geleentheid hierdie by:

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

var messageLat = Spark.getData (). LAT;

var messageLon = Spark.getData (). LON;

var messageText = Spark.getData (). TEKS;

var currentMessage = {

"messLat": messageLat,

"messLon": messageLon,

"messText": messageText,

};

geoMessageList.insert (currentMessage);

Stap 8: ONS IS GEDOEN

ONS IS KLAAR!
ONS IS KLAAR!

Hierdie projek gebruik die unieke ID van u toestel om met die GameSparks -bediener geverifieer te word, sodat u nou terug kan gaan na Unity en op speel kan klik, en u moet 'toestel geverifieer' in die konsole sien

Gaan nou na die lêer, bou instellings en klik op bou. As u nog nooit 'n app vir Android of IOS gemaak het nie, moet u moontlik 'n ontwikkelingsrekening by Google of Apple opstel.

Sodra die app op u telefoon is, moet u eers seker maak dat ARKit of ARCore 'n grondvlak opspoor. Klik nou op die logknoppie in die onderste linkerhoek. Loop 'n paar treë vorentoe en u sal 'berekende belyning' in ligblou sien opkom. Nou moet die UI -knoppies verskyn, en as boodskappe in u databasis gelaai word, word dit in die wêreld geplaas.

Om 'n nuwe GPS AR -boodskap iewers te merk, loop na die plek waar u die boodskap wil hê en klik op die boodskapikoon regs bo op die skerm. Tik die boodskap in wat u wil hê en klik op die speldknoppie!

Aanbeveel: