Unity vs SceneKit: welke tool je moet gebruiken om je ARKit-app te bouwen

Alles wat ik wou dat ik wist voordat ik mijn eerste ARKit-app bouwde.

Bij het starten van ARKit-ontwikkeling, is de eerste vraag die bijna iedereen heeft, welke tools moet ik gebruiken om mijn AR-app te bouwen? De twee meest gebruikte tools lijken Unity en SceneKit te zijn - maar welke is beter? Welke is krachtiger, flexibeler en gemakkelijker te leren? Welke heeft de meeste ondersteuning?

Ik heb de meeste van deze vragen zelf moeten beantwoorden, net als de meeste ontwikkelaars die tot nu toe AR-apps hebben gelanceerd. Dus ik dacht dat het nuttig zou zijn om in de belangrijkste verschillen tussen de twee platforms te duiken om u te helpen een gemakkelijkere beslissing te nemen over hoe u uw tijd wilt investeren.

Als je aan de slag gaat met AR-ontwikkeling, dan zijn hier een paar dingen die ik wou dat ik wist over Unity en SceneKit voordat ik mijn eerste AR-app bouwde. Dus hier gaat het.

Eerst een kort overzicht:

Unity is een volwassen 3D-game-engine, die nauw verbonden is geraakt met VR en AR vanwege de sterke focus op 3D-inhoud. De primaire taal van ontwikkeling is C #. ARKit-ontwikkeling in Unity wordt gedaan met de Unity ARKit-plug-in die de ARKit SDK in C # -scripts omhult voor gemakkelijke toegang tot alle ARKit-functies.

SceneKit is Apple's versie van een 3D-game-engine voor native iOS-ontwikkeling en wordt rechtstreeks geïntegreerd met Xcode. De primaire talen zijn Swift en Objective C.

Is een van hen objectief gezien beter?

Bij het vergelijken van twee producten lijkt het meest frustrerende antwoord op internet te zijn: "het hangt ervan af". Dus laat ik beginnen met te zeggen dat u in de meeste gevallen zult merken dat Unity de betere oplossing is voor AR-ontwikkeling. Er zijn echter enkele gevallen waarin SceneKit wint, en ik zal mijn best doen om de voor- en nadelen van elke tool uit te leggen, zodat u een weloverwogen beslissing kunt nemen.

Laten we eerst eens kijken naar twee waarschijnlijke scenario's voor ontwikkelaars van AR-apps:

  1. U bouwt een app (consument, onderneming etc.)
  2. Je bouwt een game of een 'ervaring'

Je bouwt een app

Als u ARKit in een bestaande iOS-app wilt integreren, hoeft u niet verder te zoeken. Gebruik SceneKit. Met SceneKit kun je eenvoudig een AR-weergave in je app integreren zonder iets anders in je UX te veranderen.

Als je een ervaren iOS-ontwikkelaar bent met ervaring met XCode, Swift, Cocapods, enzovoort, moet je waarschijnlijk SceneKit gebruiken. Je vermijdt de leercurve van een nieuw platform en je kunt de ARKit SDK vrij snel oppikken.

Als je een nieuwe iOS-app voor consumenten of bedrijven aan het bouwen bent en je houdt van hoe Apple's UI-elementen (zoals knoppen, gebaren en meldingen) eruitzien, dan is SceneKit wederom de betere keuze. Omdat SceneKit een Apple-product is, integreert het prachtig met XCode en kunt u uw 3D-scèneweergave op een vrij naadloze manier integreren met al hun ingebouwde 2D UI-elementen.

De algemene regel hier is dat als 3D-inhoud niet de centrale focus van uw app is en u geeft om iOS UX-sjablonen, u SceneKit gebruikt.

Het voorbehoud is dat als je geeft om snelle cross-platform ontwikkeling voor iOS en Android, of als je veel 3D-inhoud zoals geanimeerde modellen, speciale effecten en fysica gepland hebt voor je app, je Unity moet overwegen . Het is meer volwassen als een platformonafhankelijke 3D-ontwikkelingstoolkit vanwege zijn oorsprong als een game-engine.

Je bent een spel aan het bouwen

Als je een game of een meeslepende ervaring aan het bouwen bent, vooral een met veel visuele 3D-inhoud zoals personageanimaties, gamekaarten, speciale effecten en physics-simulaties, dan is Unity zeker de betere keuze.

Unity zit vol met talloze ingebouwde methoden waarmee je alles kunt doen wat je maar kunt bedenken. Als het niet is ingebouwd, is het waarschijnlijk beschikbaar in de Unity Asset Store. Vanwege deze factoren bespaart Unity je veel tijd in vergelijking met SceneKit, waar je misschien veel tijd besteedt aan het bouwen en debuggen van basisfunctionaliteit in plaats van het bouwen van je game.

Verder laat Unity je snel cross-compileren naar een aantal verschillende platforms, zodat je je ARKit-game naar Android kunt porten met slechts enkele wijzigingen in de daadwerkelijke AR-trackingbibliotheken. (Dit verandert ook snel - Unity bouwt een platformonafhankelijke XR SDK die de lage AR-bibliotheken abstraheert voor een nog snellere poort). De snelheid van ontwikkeling is vaak een vrij belangrijke factor voor ontwikkelaars, en het kan behoorlijk hoge kosten zijn om uw app voor verschillende platforms te moeten herschrijven.

Besluitvormingscriteria

Als je niet helemaal in de twee bovenstaande scenario's past, of als je niet zeker weet of je een game, een app, een gamified app of een appified game aan het bouwen bent, dan is hier een algemene vergelijking op basis van enkele algemene criteria AR-ontwikkelaars geven om.

1. Prestaties

Over het algemeen heeft een app of game die met SceneKit is gebouwd een kleinere bestandsgrootte en kan deze in sommige gevallen beter presteren. Wanneer je Unity gebruikt, neem je een volledig opgeblazen physics-engine mee naar je app. Dus als u geen zware 3D-berekeningen gebruikt, bent u misschien beter af met SceneKit.

Houd er echter rekening mee dat alle cameracode en andere AR-modules van de Unity-plug-in zijn geschreven in Objective C, dus ze lijken qua efficiëntie sterk op elkaar. Het zijn vooral de zware 3D-scènes en eventuele inefficiënties in uw projectontwerp die het vertragen. Er is hier een goede thread over het onderwerp.

Het oordeel: Unity en SceneKit zijn hier redelijk gelijk.

2. Compatibiliteit met 3D-formaten

Ik heb persoonlijk een pijnlijke tijd gehad met het importeren van 3D-modellen en animaties in SceneKit. Houd er bij het zoeken naar 3D-inhoud voor uw game of app in het algemeen rekening mee dat SceneKit u beperkt tot het gebruik van Collada (.dae) of Wavefront (.obj) bestanden. Verder heb ik af en toe gezien dat sommige .obj-bestanden niet correct worden weergegeven in Scenekit.

Unity is veel beter in het omgaan met elk soort 3D-formaat. Met Unity kunt u niet alleen .fbx-bestanden importeren (3D-modellen die animaties bevatten), maar u kunt ook rechtstreeks scènes laden vanuit 3D-ontwerptools zoals Blender.

Het vonnis: +1 voor Unity hier.

3. Gemakkelijk debuggen

Unity is een zeer visuele IDE, met geweldige visuele foutopsporingshulpmiddelen waarmee u alle 3D-inhoud in uw scène kunt zien en ermee kunt werken tijdens runtime. Hoewel u uw app rechtstreeks op een iOS-apparaat moet uitvoeren om ARKit-problemen correct te testen en te debuggen, kunt u tools zoals Unity ARKit Remote gebruiken om de 3D-interacties in uw app rechtstreeks in de Unity-editor te prototypen.

SceneKit, aan de andere kant, biedt alleen console-foutopsporing binnen XCode. Hoewel sommige ontwikkelaars hier de voorkeur aan geven, kan dit het snel testen van 3D-interacties in uw app of game in de weg staan.

Het vonnis: +1 voor Unity hier.

4. Beschikbaarheid van documenten / zelfstudies / voorbeelden

Unity heeft ongelooflijk veel documentatie, tutorials en voorbeeldcode voor bijna alles wat je kunt bouwen. Vanwege hun grote community van ontwikkelaars zijn er ook veel tutorials gemaakt door ontwikkelaars.

Natuurlijk is de iOS-ontwikkelaarsgemeenschap ook behoorlijk groot. Hoewel ARKit zelf misschien nieuw is, heeft de enorme omvang van de community geresulteerd in een groot aantal voorbeelden, blogposts, videozelfstudies en online cursussen om uw overgang naar een AR-ontwikkelaar gemakkelijk te maken.

Op het gebied van 3D-inhoudsproblemen zoals 3D-geometrie en wiskunde wint Unity omdat de grote gemeenschap van Unity-game-ontwikkelaars ervoor heeft gezorgd dat de meeste vragen die je hebt ergens op internet een antwoord zullen hebben.

Als u op zoek bent om te beginnen, hier zijn mijn favoriete inleidende video tutorials voor Eenheid en SceneKit.

Eenheid : bouw een lopende zombie-animatie.

Scenekit : maak en bekijk eenvoudige 3D-objecten.

Het vonnis: +0,5 voor Unity hier

5. Snelheid van ontwikkeling

Veel ontwikkelaars melden dat de leercurve van Unity korter is dan Scenekit. Dit komt waarschijnlijk omdat je 3D-inhoudontwikkeling op een veel eenvoudigere manier kunt leren op Unity, voordat je met AR-ontwikkeling begint.

Technisch gezien is een AR-game eigenlijk gewoon een 3D-game met een camera-achtergrond. Door je leerproces op deze manier op te splitsen, worden de zaken een stuk intuïtiever.

De andere grote factor hier is platformonafhankelijke ontwikkeling. Hoewel u niet rechtstreeks een Unity ARKit-project naar Android kunt bouwen, kunt u in ieder geval de 3D-inhoud en interacties die u op elk platform heeft gebouwd, hergebruiken. U hoeft slechts per apparaat een nieuwe Camera Manager aan te sluiten. Unity maakt dit nu nog gemakkelijker door de hardwarespecifieke functies zoals ARKit en ARCore te abstraheren met hun nieuwe XR SDK.

Het vonnis: +1 voor Unity hier

Conclusie

Over het algemeen is Unity bijna altijd de betere oplossing als je een game bouwt.

Als u een app bouwt, moet u overwegen of u de native iOS-ontwikkeling en de elementen van de gebruikersinterface van Apple waardeert boven platformonafhankelijke ontwikkeling. Als uw app minimale 3D-interacties heeft, is SceneKit de betere optie. Blijf anders bij Unity.

Een ander advies dat ik u kan geven, is om niet te veel tijd aan deze beslissing te besteden. Ga er gewoon mee aan de slag. U verspilt veel minder tijd aan het uitproberen van een tool en het overschakelen als u denkt dat het niet goed genoeg werkt. Als iOS AR-ontwikkelaar zullen zowel XCode als Unity uiteindelijk nuttige vaardigheden zijn om te verwerven.

Om het samen te vatten, hier is een goede quote van de ARKitCreators-subreddit.

“Een goede vuistregel zou zijn om Swift te gebruiken als je app relatief eenvoudig is, of als AR- en 3D-interacties niet de kern vormen van wat je probeert te bouwen. En gebruik Unity voor het tegenovergestelde. "

Wie ben ik?

Ik ben de CEO en mede-oprichter van Placenote, een SDK die mobiele AR-apps de mogelijkheid geeft om AR-inhoud permanent te vergrendelen op elke fysieke locatie in de echte wereld. Dus als je bijvoorbeeld een app zoals indoor navigatie, een AR-graffiti-app of zelfs een multiplayer-game bouwt, moet je Placenote SDK eens bekijken.

Placenote SDK heeft voorbeeldcode beschikbaar voor zowel Unity- als SceneKit-ontwikkelaars, dus voel je vrij om onze voorbeeld-apps te gebruiken om je platformbeslissing te nemen!

U kunt de SDK hier installeren

Referenties

Ik heb dit artikel samengesteld met behulp van deze meerdere geweldige Quora- en Reddit-threads.

  1. Wat zijn de voor- en nadelen van het maken van augmented reality-apps in Swift vs Unity?
  2. Snel versus eenheid
  3. Ik wil AR-apps maken, moet ik ARKit eerst of Unity leren?
  4. Is het gemakkelijker om iOS SceneKit of de Unity-game-engine te gebruiken om te ontwikkelen voor een iOS 11 ARKit-project?