iOS 9 toevoegingen aan SceneKit

Invoering

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.

voorwaarden

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.

1. Xcode scène-editor

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:

  • Door te klikken en te slepen, draait u de weergave rond het punt waar u momenteel naar kijkt.
  • Bladeren schuift de scène over de weergave.
  • persing alt of Keuze en door verticaal te scrollen, kun je de scène in- en uitzoomen. Merk op dat dit ook mogelijk is door te knijpen op een trackpad.

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.

2. Zelfverlichtende materialen

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

3. Scèneovergangen

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.

4. Audio-knooppunten

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.

5. Metaaladoptie

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.

Conclusie

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.