SceneKit is een high-level 3D grafische API die beschikbaar is in OS X sinds versie 10.8 (Mountain Lion) en werd geïntroduceerd op iOS met de release van iOS 8. In deze tutorial laat ik je de belangrijkste verbeteringen en nieuwe mogelijkheden van het framework zien heeft gewonnen met de release van iOS 9 en OS X 10.11 El Capitan.
Om me te volgen, moet je Xcode 7.2 of hoger op je computer hebben geïnstalleerd. Deze versie van Xcode bevat Swift 2.1 en de nieuwste ElK-SDK's voor iOS 9 en OS X. Ik ga er ook van uit dat je al bekend bent met het SceneKit-framework. Als je SceneKit nog niet kent, raad ik je aan eerst mijn introductieles te lezen.
De belangrijkste toevoeging aan SceneKit in iOS 9 en OS X El Capitan is de mogelijkheid om scènes te maken en te bewerken met behulp van een visuele editor ingebouwd in Xcode.
Maak een nieuw Xcode-project door de. Te kiezen iOS> Toepassing> Toepassing enkele weergave sjabloon. Maak een nieuw bestand en kies de iOS> Bron> SceneKit Scene-bestand sjabloon. Geef het nieuwe bestand een naam MainScene.
Wanneer u het nieuwe bestand selecteert, geeft Xcode u een scherm dat lijkt op het volgende:
Voordat u objecten aan uw scène toevoegt, moet u eerst bekend raken met het navigeren door de nieuwe scène-editor. Hier zijn alle basisbewegingsmechanismen die u kunt gebruiken:
Zodra u vertrouwd bent met het navigeren door uw scène, klikt u op Standpunt menu links onderaan de scène-editor en verander het van Gratis camera naar camera.
Hiermee wordt uw standpunt opnieuw ingesteld voor de camera die standaard aan de scène wordt toegevoegd.
Open de Objectbibliotheek aan de rechterkant. Het bevat een verscheidenheid aan objecten die u aan uw scène kunt toevoegen. Voor nu maken we alleen een basisscène. Zoeken Gebied in de Objectbibliotheek en sleep een instantie naar je scène. Wanneer u de bol selecteert die u hebt toegevoegd, verschijnt een reeks besturingselementen in het midden.
Met deze knoppen kunt u het object in uw scène verplaatsen. U kunt ook klikken en slepen op een van de gekleurde curven tussen de pijlen om het object te draaien.
Van de Objectbibliotheek, Voeg een ... toe Directional Light naar je scene. Gebruik de rotatiebesturingselementen en klik en sleep op de groene gebogen lijn om het licht te draaien totdat uw bol verlicht is, zoals weergegeven in de volgende schermafbeelding.
Naast bewegende en roterende objecten in uw scène, kunt u ook een reeks eigenschappen configureren om de scènecodecode in uw project te elimineren. Selecteer de bol die u eerder hebt toegevoegd, open de Kenmerken Inspector aan de rechterkant en verander de sfeer Radius naar 0.5.
Als je door de Kenmerken Inspector, je zult zien dat je ook verschillende andere eigenschappen van de geometrie van de bol kunt bewerken.
Nu we een basisscène hebben ingesteld, is het tijd om dit in een echt werkende app te laden. Open ViewController.swift en vervang de inhoud van het bestand met de volgende code:
importeren importeren UIKit importeren SceneKit importeren SpriteKit-klasse ViewController: UIViewController var sceneView: SCNView? var mainScene = SCNScene (named: "MainScene.scn") override func viewDidLoad () super.viewDidLoad () negeer func viewDidAppear (geanimeerd: Bool) super.viewDidAppear (geanimeerd) self.sceneView = SCNView (frame: self. view.frame) self.sceneView? .scene = mainScene self.view.addSubview (self.sceneView!) let button = UIButton (type: .System) button.tintColor = UIColor.blueColor () button.setTitle ("Transition", forState: .Normal) button.sizeToFit () button.addTarget (self, action: "didPressTransition", forControlEvents: .TouchUpInside) button.center.x = self.view.center.x button.frame.origin.y = self. view.frame.height - button.frame.height - 12 self.sceneView? .addSubview (button) func didPressTransition () override func didReceiveMemoryWarning () super.didReceiveMemoryWarning ()
De eerste dingen om op te merken zijn de mainScene
eigenschap en de initializer, init (vernoemd :)
, we roepen aan om de SCNScene
aanleg. Met deze initialisator hoeft u alleen maar in te geven de naam van het scènebestand dat u zojuist hebt gemaakt.
We maken en configureren ook een knop in de view-controller's viewDidLoad ()
methode. We zullen die knop een beetje later gebruiken in deze tutorial.
Wanneer u uw app uitvoert, zou u uw scène op het scherm moeten zien net zoals het er uitzag in de scèneditor in Xcode.
SceneKit-materialen kunnen nu een Verlichting component om een object te verlichten zonder dat er extra licht nodig is. Deze zelfverlichting is het meest zichtbaar wanneer het object niet direct wordt geraakt door een ander licht, bijvoorbeeld waar onze bol zwart is in onze huidige scène.
Open MainScene.scn, selecteer de bol die u eerder hebt toegevoegd en open de Materiaalinspector aan de rechterkant. Scroll naar beneden en stel de Verlichting eigenschap naar een rode kleur.
Je zult zien dat je bol nu een rode tint heeft, zelfs als er geen licht op valt.
U kunt hetzelfde resultaat bereiken in de code door de volgende code toe te voegen:
let material = SCNMaterial () material.selfIllumination.contents = UIColor.redColor () sphereNode.material = materiaal
Door gebruik te maken van SpriteKit's SKTransition
klasse, je kunt nu ook geanimeerde overgangen toevoegen tussen SCNScene
voorwerpen. Open ViewController.swift en vervang de implementatie van de didPressTransition ()
methode van de ViewController
les met het volgende:
func didPressTransition () let transition = SKTransition.pushWithDirection (.Right, duration: 1.0) self.sceneView? .presentScene (SCNScene (), withTransition: transition, incomingPointOfView: nil, completionHandler: nil)
U kunt elke gebruiken SKTransition
object met de presentScene (_: withTransition: incomingPointOfView: completionHandler :)
methode. Blader door de documentatie van de SKTransition
klas om alle mogelijke overgangen te bekijken.
Bouw en voer je app opnieuw uit. Deze keer wanneer u op drukt Overgang knop, zou de bol naar rechts moeten bewegen als een nieuwe, lege scène op het scherm wordt geanimeerd.
Een andere belangrijke toevoeging aan SceneKit is de mogelijkheid om audio af te spelen op basis van een knooppunt. Daarnaast kun je, door rond deze audioknooppunten te bewegen, ook een 3D-audio-effect creëren, zodat de gebruiker geluiden kan ervaren die eromheen lijken te zijn.
Om dit 3D-audio-effect te creëren, moet elk object dat voldoet aan de SCNSceneRenderer
protocol (dat wil zeggen, elke SCNView
) heeft een audioListener
eigenschap die een knoop specificeert waar de geluiden zouden moeten zijn gehoord van. Standaard is deze eigenschap altijd de camera binnen een scène.
Een audioknooppunt maken kan met de volgende code:
laat audioNode = SCNNode () laat audioSource = SCNAudioSource (fileNamed: "AnAudioFile.mp3")! laat audioPlayer = SCNAudioPlayer (bron: audioSource) audioNode.addAudioPlayer (audioPlayer) laat spelen = SCNAction.playAudioSource (audioSource, waitForCompletion: true) audioNode.runAction (play)
Houd er rekening mee dat de audio niet automatisch wordt afgespeeld. Dit moet gebeuren via een SCNAction
bijvoorbeeld zoals in het bovenstaande voorbeeld. Blader door de Multimedia Programming Guide voor een lijst met compatibele audiobestandstypen.
Als u geen gebruik wilt maken van deze positionele audio, bijvoorbeeld met muziek, kunt u eenvoudig omgevingsaudioknooppunten maken. Dit wordt gedaan door het instellen van positie-
eigenschap van de audiobron voor vals
. U kunt ook continu een geluid herhalen door de bron in te stellen loops
eigendom aan waar
.
Naast OpenGL ES ondersteunt SceneKit nu ook Apple's Metal grafische API voor het weergeven van de grafische afbeeldingen, wat resulteert in aanzienlijk betere prestaties op nieuwere apparaten. Dit betekent ook dat u, als u bekend bent met de Metal shading-taal, nu gebruik kunt maken van custom SCNProgram
en SCNTechnique
objecten om te profiteren van nieuwe metalen functies.
SceneKit gebruikt standaard Metal op nieuwere apparaten en OpenGL ES op oudere apparaten. Als u om welke reden dan ook alleen een van deze rendering-API's wilt gebruiken, kunt u de renderingAPI
eigendom op elke SCNView
voorwerp.
De toevoegingen aan SceneKit in iOS 9 en OS X El Capitan hebben het framework nog beter in staat en geschikter gemaakt voor casual 3D-games. Naast de nieuwe functies die aan het SceneKit-framework zijn toegevoegd, kunt u met de nieuwe Xcode Scene Editor eenvoudig scènes maken zonder alles programmatisch in te stellen.
Laat zoals altijd uw opmerkingen en feedback achter in de opmerkingen hieronder.