Unity vs SceneKit: hvilket værktøj du skal bruge til at opbygge din ARKit-app

Alt hvad jeg ville ønske jeg vidste, før jeg byggede min første ARKit-app.

Når ARKit-udviklingen startes, er det første spørgsmål næsten alle, hvilke værktøjer skal jeg bruge til at opbygge min AR-app? De to mest anvendte værktøjer ser ud til at være Unity og SceneKit - men hvad er bedre? Hvilken er mere kraftfuld, fleksibel og lettere at lære? Hvilken har mest support?

Jeg har selv måttet arbejde igennem de fleste af disse spørgsmål, ligesom de fleste udviklere, der hidtil har lanceret AR-apps. Så jeg troede, det ville være nyttigt at dykke ned i de vigtigste forskelle mellem de to platforme for at hjælpe dig med at tage en lettere beslutning om, hvordan du investerer din tid.

Hvis du kommer i gang med AR-udvikling, er der et par ting, jeg ville ønske, jeg vidste om Unity og SceneKit, før jeg byggede min første AR-app. Så her går.

Først en hurtig oversigt:

Unity er moden en 3D-spilmotor, som er blevet tæt knyttet til VR og AR på grund af sit stærke fokus på 3D-indhold. Det primære udviklingssprog er C #. ARKit-udvikling i Unity udføres med Unity ARKit-plugin, der indpakker ARKit SDK i C # -skripter for nem adgang til alle ARKit-funktioner.

SceneKit er Apples tilgang til en 3D-spilmotor til native iOS-udvikling og kommer direkte integreret med Xcode. De primære sprog er Swift og Objective C.

Er en af ​​dem objektivt bedre?

Når man sammenligner to produkter, ser det mest frustrerende svar på internettet ud til at være "det afhænger." Så lad mig starte med at sige, i de fleste tilfælde finder du, at Unity er den bedre løsning til AR-udvikling. Der er dog nogle tilfælde, hvor SceneKit vinder, og jeg vil gøre mit bedste for at forklare fordele og ulemper ved hvert værktøj, så du kan træffe en informeret beslutning.

Lad os først se på to sandsynlige scenarier for AR-appudviklere lige nu:

  1. Du bygger en app (forbruger, virksomhed osv.)
  2. Du bygger et spil eller en "oplevelse"

Du bygger en app

Hvis du ønsker at integrere ARKit i en eksisterende iOS-app, skal du ikke lede længere. Brug SceneKit. SceneKit giver dig mulighed for nemt at integrere en AR-visning i din app uden at ændre noget andet i din UX.

Hvis du er en ekspert iOS-udvikler med erfaring med XCode, Swift, Cocapods osv., Skal du sandsynligvis stadig bruge SceneKit. Du undgår læringskurven for en ny platform, og du kan hente ARKit SDK ret hurtigt.

Hvis du opbygger en ny iOS-app til forbruger eller virksomhed, og du elsker, hvordan Apples UI-elementer (som knapper, bevægelser og underretninger) ser ud, er SceneKit igen det bedre valg. At være et Apple-produkt integrerer SceneKit smukt med XCode og giver dig mulighed for at integrere din 3D-scenevisning med alle deres indbyggede 2D UI-elementer på en ret problemfri måde.

Den generelle regel her er, at hvis 3D-indhold ikke er det centrale fokus for din app, og du er interesseret i iOS UX-skabeloner, skal du gå med SceneKit.

Den advarsel er, at hvis du holder af hurtig cross-platform udvikling på tværs af iOS og Android, eller hvis du har en masse af 3D-indhold som animerede modeller, specielle effekter og fysik planlagt for din app, bør du overveje Enhedslisten. Det er mere modent som et cross-platform 3D-udviklingsværktøjssæt på grund af dets rødder som en spilmotor.

Du bygger et spil

Hvis du bygger et spil eller en fordybende oplevelse, især et med masser af visuelt 3D-indhold som karakteranimationer, spilkort, specialeffekter og fysiksimuleringer, er Unity absolut det bedre valg.

Enhed er fyldt med masser af indbyggede metoder, der giver dig mulighed for at gøre alt, hvad du muligvis kan tænke på. Hvis det ikke er indbygget, er det sandsynligvis tilgængeligt i Unity Asset-butikken. På grund af disse faktorer sparer Unity dig meget tid i forhold til SceneKit, hvor du muligvis bruger meget tid på at opbygge og debugge grundlæggende funktionalitet i stedet for at opbygge dit spil.

Desuden lader Unity dig hurtigt krydse kompilering til en række forskellige platforme, så du kan porte dit ARKit-spil til Android med kun få ændringer i de faktiske AR-sporingsbiblioteker. (Dette ændrer sig også snart - Unity bygger en XR SDK på tværs af platforme, der abstrakterer AR-bibliotekerne på lavt niveau for en endnu hurtigere port). Udviklingshastighed er ofte en ret vigtig faktor for udviklere, og det kan være en ret stor pris at skulle omskrive din app til forskellige platforme.

Beslutningskriterier

Hvis du ikke helt passer ind i de to scenarier ovenfor, eller hvis du ikke er sikker på, om du bygger et spil, en app, en gamified app eller et appified-spil, her er en generel sammenligning baseret på nogle almindelige kriterier AR-udviklere bekymre sig om.

1. Ydeevne

Generelt har en app eller et spil bygget med SceneKit en mindre filstørrelse og kan i nogle tilfælde være mere performant. Når du bruger Unity, bringer du en fuldblæst fysikmotor med i din app. Så hvis du ikke bruger tung 3D-beregning, er du måske bedre med SceneKit.

Husk dog, at alle kamerakoden og andre AR-moduler i Unity-pluginet er skrevet i mål C, så de er meget ens med hensyn til effektivitet. Det er hovedsageligt de tunge 3D-scener og eventuelle ineffektiviteter i dit projektdesign, der bremser det. Der er en god tråd om emnet her.

Dommen: Enhed og SceneKit er ret lige her.

2. Kompatibilitet med 3D-format

Jeg har personligt haft en smertefuld tid på at importere 3D-modeller og animationer til SceneKit. Generelt, når du køber 3D-indhold til dit spil eller din app, skal du huske på, at SceneKit vil begrænse dig til at bruge enten Collada (.dae) eller Wavefront (.obj) filer. Desuden har jeg lejlighedsvis set, at nogle .obj-filer ikke gengives korrekt i Scenekit.

Enhed er meget bedre til at håndtere enhver form for 3D-format. Med Unity kan du ikke kun importere .fbx-filer (3D-modeller, der inkluderer animationer), men du kan også indlæse scener direkte fra 3D-designværktøjer som Blender.

Dommen: +1 for Unity her.

3. Let debugging

Enhed er en meget visuel IDE med fantastiske visuelle fejlretningsværktøjer, der giver dig mulighed for at se og interagere med alt 3D-indhold i din scene under kørsel. Mens du har brug for at køre din app direkte på en iOS-enhed for korrekt at teste og fejle ARKit-problemer, kan du bruge værktøjer som Unity ARKit Remote til at prototype 3D-interaktioner i din app direkte i Unity-editoren.

SceneKit leverer derimod kun fejlfinding af konsoller inden for XCode. Mens nogle udviklere foretrækker dette, kan det komme i vejen for hurtigt at teste 3D-interaktioner i din app eller dit spil.

Dommen: +1 for Unity her.

4. Tilgængelighed af Docs / Tutorials / Prøver

Enhed har utrolig store ressourcer med dokumentation, tutorials og prøvekode til næsten alt, hvad du kan bygge. På grund af deres store samfund af udviklere er der også en masse tutorials bygget af udviklere.

Selvfølgelig er iOS-udviklerfællesskabet også ret stort. Mens ARKit i sig selv kan være nyt, har samfundets store størrelse resulteret i en god mængde prøver, blogindlæg, video-tutorials og online-kurser for at gøre din overgang til en AR-udvikler let.

Med hensyn til 3D-indholdsproblemer som 3D-geometri og matematik vinder Unity, fordi det store samfund af Unity-spiludviklere har sørget for, at de fleste spørgsmål, du har, har svar et eller andet sted på internettet.

Hvis du ønsker at komme i gang, her er mine foretrukne introduktionsvideo -tutorials til Unity og SceneKit.

Enhed : Byg en gående zombie-animation.

Scenekit : Opret og se enkle 3D-objekter.

Dommen: +0,5 for Unity her

5. Udviklingshastighed

Mange udviklere rapporterer, at Unity's indlæringskurve er kortere end Scenekit. Dette skyldes sandsynligvis, at du kan lære 3D-indholdsudvikling på en meget lettere måde på Unity, før du hopper ind i AR-udvikling.

Fra et teknisk perspektiv er et AR-spil virkelig bare et 3D-spil med en kamerabaggrund. At opdele din læringsproces på denne måde gør tingene meget mere intuitive.

Den anden store faktor her er udvikling på tværs af platforme. Mens du ikke direkte kan opbygge et Unity ARKit-projekt til Android, kan du i det mindste genbruge 3D-indhold og interaktioner, du har bygget på enhver platform. Du skal kun tilslutte en ny Camera Manager pr. Enhed. Enhed gør dette endnu nemmere nu ved at abstrakte de hardwarespecifikke funktioner som ARKit og ARCore med deres nye XR SDK.

Dommen: +1 for Unity her

Konklusion

Generelt, hvis du bygger et spil, er enhed næsten altid den bedre løsning.

Hvis du bygger en app, skal du overveje, om du sætter pris på iOS-native-udvikling og Apples brugergrænsefladeelementer frem for udvikling på tværs af platforme. Hvis din app har minimale 3D-interaktioner, vil SceneKit være den bedre mulighed. Ellers hold dig til Unity.

Et andet råd, jeg kan give dig, er at ikke bruge for meget tid på denne beslutning. Bare kom i gang med en. Du spilder meget mindre tid på at prøve et værktøj og skifte, hvis du har lyst til, at det ikke fungerer godt nok. Som iOS AR-udvikler vil både XCode og Unity i sidste ende være nyttige færdigheder til at erhverve.

For at opsummere det her er et godt citat fra ARKitCreators subreddit.

”En anstændig tommelfingerregel ville være at bruge Swift, hvis din app er relativt enkel, eller hvis AR- og 3D-interaktioner ikke er kernen i det, du prøver at bygge. Og brug Enhed til det modsatte. ”

Hvem er jeg?

Jeg er administrerende direktør og medstifter af Placenote, en SDK, der giver mobile AR-apps muligheden for permanent at låse AR-indhold til enhver fysisk placering i den virkelige verden. Så hvis du f.eks. Byggede en app som indendørs navigation, en AR-graffiti-app eller endda et multiplayer-spil, skal du tjekke Placenote SDK.

Placenote SDK har eksempelkode tilgængelig for både Unity- og SceneKit-udviklere, så du er velkommen til at bruge vores eksempler på apps til at hjælpe med at træffe din platformbeslutning!

Du kan installere SDK her

Referencer

Jeg har samlet denne artikel ved hjælp af disse flere fantastiske Quora- og Reddit-tråde.

  1. Hvad er fordele og ulemper ved at oprette augmented reality-apps i Swift vs Unity?
  2. Swift vs Unity
  3. Jeg vil oprette AR-apps, skal jeg først lære ARKit eller Unity?
  4. Er det lettere at bruge iOS SceneKit eller Unity-spilmotoren til at udvikle til et iOS 11 ARKit-projekt?