iOS 9 Adăugări la SceneKit

Introducere

SceneKit este un API pentru grafica 3D la nivel înalt, care a fost disponibil în OS X de la versiunea 10.8 (Mountain Lion) și a fost introdus pe iOS cu lansarea iOS 8. În acest tutorial, vă arăt îmbunătățirile majore și noile capabilități a câștigat cu lansarea iOS 9 și OS X 10.11 El Capitan.

Cerințe preliminare

Pentru a urmări împreună cu mine, trebuie să aveți Xcode 7.2 sau mai recent instalat pe mașina dvs. Această versiune de Xcode include Swift 2.1 și cele mai recente SDK-uri iOS 9 și OS X El Capitan. De asemenea, voi presupune că deja sunteți familiarizat cu cadrul SceneKit. Dacă sunteți nou în SceneKit, vă recomandăm să citiți primul tutorial introductiv.

1. Editor de scenarii Xcode

Cea mai importantă adăugare a SceneKit în iOS 9 și OS X El Capitan este abilitatea de a crea și edita scene folosind un editor vizual construit în Xcode.

Creați un nou proiect Xcode selectând iOS> Application> Application Single View șablon. Creați un fișier nou și alegeți iOS> Resurse> Fișier SceneKit Scene șablon. Denumiți noul fișier MainScene.

Când selectați noul fișier, Xcode vă prezintă un ecran similar cu următorul:

Înainte de a adăuga obiecte la scenă, trebuie să vă familiarizați mai întâi cu navigarea noului editor de scenă. Iată toate mecanismele de mișcare de bază pe care le puteți utiliza:

  • Dând clic și trăgând rotește vederea în jurul punctului pe care îl priviți în prezent.
  • Derularea scanează scena dincolo de vedere.
  • Presare Alt sau Opțiune și derularea verticală vă permite să apropiați și să scenați scena. Rețineți că acest lucru este posibil și prin prinderea pe un trackpad.

După ce vă convine navigarea în scenă, faceți clic pe Punct de vedere meniul din stânga jos a editorului de scenă și modificați-l Cameră liberă la aparat foto.

Acest lucru restabilește punctul dvs. de vedere la camera care este adăugată la scenă în mod implicit.

Deschide Biblioteca de obiecte pe dreapta. Acesta include o varietate de obiecte pe care le puteți adăuga la scenă. Pentru moment, vom crea doar o scenă de bază. Caută Sferă în Biblioteca de obiecte și trageți o instanță în scenă. Când selectați sfera pe care ați adăugat-o, un set de comenzi apare în centrul acesteia.

Aceste comenzi vă permit să mutați obiectul în jurul scenei. De asemenea, puteți să faceți clic și să trageți pe oricare dintre curbele colorate între săgeți pentru a roti obiectul.

De la Biblioteca de obiecte, adauga o Lumină direcțională la scena ta. Utilizând comenzile de rotație, faceți clic și trageți pe linia verde curbată pentru a roti lumina până când sfera dvs. este aprinsă așa cum se arată în următoarea captură de ecran.

În plus față de obiectele care se mișcă și rotesc în scenă, puteți configura, de asemenea, o serie de proprietăți pentru a elimina necesitatea pentru codul de configurare a scenei în proiectul dvs. Selectați sfera pe care ați adăugat-o mai devreme, deschideți Atribuții Inspector pe partea dreaptă și schimba sfera Rază la 0.5.

Dacă te uiți prin Atribuții Inspector, veți vedea că puteți edita și alte proprietăți ale geometriei sferei.

Acum că avem o scenă de bază înființată, este timpul să încărăm această aplicație într-o aplicație reală de funcționare. Deschis ViewController.swift și înlocuiți conținutul fișierului cu următorul cod:

import Importul UIKit Importul SceneKit Clasa SpriteKit ViewController: UIViewController var sceneView: SCNView? var mainScene = SCNScene (numit: "MainScene.scn") suprascrie func viewDidLoad () super.viewDidLoad () suprascriere func viewDidAppear (animat: Bool) super.viewDidAppear (animat) self.sceneView = SCNView (frame: self. view.frame) auto.sceneView? .scene = mainScene auto.view.addSubview (auto.sceneView!) butonul = butonul UIButton (tip: .System ).tintColor = butonul UIColor.blueColor () button.setTitle (" forState:. Normal) button.sizeToFit () buton.addTarget (auto, acțiune: "didPressTransition", forControlEvents: .TouchUpInside) button.center.x = self.view.center.x button.frame.origin.y = auto. ViewFrame.height - button.frame.height - 12 auto.sceneView? .addSubview (buton) func didPressTransition ()  override func didReceiveMemoryWarning () super.didReceiveMemoryWarning ()

Primele lucruri de reținut sunt: mainScene proprietății și inițializatorului, init (numit :), ne invocăm pentru a instanția SCNScene instanță. Cu acest inițializator, tot ce trebuie să faceți este numele fișierului de scenă creat acum un moment.

De asemenea, creăm și setăm un buton în controlerul de vizualizare viewDidLoad () metodă. Vom folosi acel buton un pic mai târziu în acest tutorial.

Când rulați aplicația dvs., ar trebui să vedeți că scena dvs. apare pe ecran așa cum se uită în editorul de scenă din Xcode.

2. Materiale cu auto-iluminare

Materialele SceneKit pot specifica acum lumină componentă pentru a ilumina un obiect fără a fi nevoie de lumini suplimentare. Această iluminare de sine este cea mai vizibilă în cazul în care obiectul nu este lovit direct de o altă lumină, de exemplu, în cazul în care sfera noastră este neagră în scena noastră actuală.

Deschis MainScene.scn, selectați sfera pe care ați adăugat-o mai devreme și deschideți Inspector materiale pe dreapta. Derulați în jos și setați lumină proprietate la o culoare roșie.

Veți vedea că sfera dvs. are acum o nuanță roșie, chiar dacă nu o atinge nici o lumină.

Puteți obține același rezultat în cod prin adăugarea următorului cod:

lasa materialul = SCNMaterial () material.selfIllumination.contents = UIColor.redColor () sphereNode.material = material

3. Treceri de scenă

Folosind SpriteKit's SKTransition clasa, puteți adăuga acum și tranziții animate între ele SCNScene obiecte. Deschis ViewController.swift și să înlocuiască punerea în aplicare a directivei didPressTransition () metodă a ViewController clasă cu următoarele:

func didPressTransition () permite tranziție = SKTransition.pushWithDirection (.Right, duration: 1.0) self.sceneView? .presentScene (SCNScene (), cuTransition: transition, incomingPointOfView: nil, completionHandler: nil)

Puteți folosi orice SKTransition obiect cu presentScene (_: withTransition: incomingPointOfView: completionHandler :) metodă. Răsfoiți documentația SKTransition pentru a verifica toate tranzițiile posibile.

Construiți și rulați din nou aplicația. De data aceasta, când apăsați butonul Tranziție , sfera trebuie animată spre dreapta, pe măsură ce o scenă nouă, necompletată este animată pe ecran.

4. Nodurile audio

Un alt plus major pentru SceneKit este capacitatea de a reda audio pe baza nodului-nod. În plus, prin deplasarea în jurul acestor noduri audio, puteți crea, de asemenea, un efect audio 3D, astfel încât utilizatorul să poată avea sunete care par să le înconjoare.

Pentru a crea acest efect audio 3D, fiecare obiect care se conformează SCNSceneRenderer protocol (adică fiecare SCNView) are un audioListener proprietate care specifică un nod în care sunetele ar trebui să fie auzit din. Implicit, această proprietate este întotdeauna camera în cadrul unei scene.

Crearea unui nod audio se poate face cu următorul cod:

permiteți audioNode = SCNNode () să lase audioSource = SCNAudioSource (fileNamed: "AnAudioFile.mp3")! lăsați audioPlayer = SCNAudioPlayer (sursa: audioSource) audioNode.addAudioPlayer (audioPlayer) să se joace = SCNAction.playAudioSource (audioSource, waitForCompletion: true) audioNode.runAction (play)

Rețineți că sunetul nu se redă automat. Acest lucru trebuie făcut printr-un proces SCNAction după cum se arată în exemplul de mai sus. Răsfoiți Ghidul de programare multimedia pentru o listă de tipuri de fișiere audio compatibile.

Dacă nu doriți să profitați de acest sunet pozițional, de exemplu, cu muzică, puteți crea cu ușurință noduri audio ambientale. Acest lucru se face prin setarea pozitional proprietatea sursei audio la fals. Puteți, de asemenea, să bifați continuu un sunet prin setarea sursei bucle proprietate la Adevărat.

5. Adoptarea metalelor

În plus față de OpenGL ES, SceneKit oferă, de asemenea, suport pentru API pentru grafica metalică Apple pentru redarea graficelor sale, rezultând performanțe dramatic mai bune pe dispozitivele mai noi. Acest lucru înseamnă, de asemenea, că, dacă sunteți familiarizați cu limbajul de umbrire din metal, puteți acum utiliza personalizat SCNProgram și SCNTechnique obiecte pentru a profita de noile caracteristici de metal.

În mod implicit, SceneKit utilizează metalele pe dispozitive mai noi și OpenGL ES pe dispozitive mai vechi. Dacă, din orice motiv, doriți să utilizați doar unul dintre aceste API-uri de redare, puteți modifica renderingAPI proprietate pe orice SCNView obiect.

Concluzie

Adăugările la SceneKit în iOS 9 și OS X El Capitan au făcut cadrului chiar mai capabil și mai potrivit pentru jocurile 3D obișnuite. În plus față de noile caracteristici adăugate în cadrul SceneKit, noul Editor Xcode Scene vă permite să creați cu ușurință scene fără a fi nevoie să configurați totul programabil.

Ca întotdeauna, vă rugăm să aveți grijă să lăsați comentariile și comentariile dvs. în comentariile de mai jos.

Cod