本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會,完整版請購買正版書籍node
此書對應的代碼地址git
SceneKit系列文章目錄github
更多iOS相關知識查看github上WeekWeekUpProjectswift
physics物理效果編輯器
3D空間的觸摸事件post
自帶一個定義了座標系的root node(根節點),使用scene gragh來組織場景,能夠向內部增長樹狀結構的內部節點(node),例如 lights光源, cameras相機, geometry幾何體, particle emitters粒子發射源. 須要放到SCNView的實例中呈現,SCNView在OSX(macOS)中是NSView的子類,在iOS中是UIView的子類;
左側樹狀結構
座標系,屏幕外是+Z方向,座標使用向量表示,示例SCNVector3(x: 0, y: 5, z: 10)
遊戲中的每一個元素都被稱爲node(節點),存放在樹狀結構scene gragh中,例如 lights光源, cameras相機, geometry幾何體, particle emitters粒子發射源.每一個scene graph中包含一個特殊的基礎節點:root node(根節點),能夠把其餘節點添加到節點下面,變成它的子節點.
添加到scene中的node,默認在(x:0, y:0, z:0),即相對於父節點的位置.要想調整節點在父節點的位置,應該調整local coordinates(本地座標系),而不是調整world coordinates(世界座標系).
注意 默認狀況下,若是一個場景中沒有任何改變時,Scene Kit會進入"paused"(暫停)狀態,爲了防止這種狀況,須要在建立SCNView實例時設置playing屬性爲true如
scnView.playing = true
複製代碼
攝像機的顯示範圍控制,小於zNear不顯示,大於zFar不顯示.添加到一個空節點的camera屬性裏
func setupCamera() {
// 1.建立空的節點
cameraNode = SCNNode()
// 2.建立相機,添加到節點中
cameraNode.camera = SCNCamera()
// 3.設置相機節點的位置
cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
// 4.添加到根節點中
scnScene.rootNode.addChildNode(cameraNode)
}
複製代碼
系統自帶了不少基礎的幾何體,添加到一個空節點的geometry屬性裏 第一排從左起:cone(圓錐體), torus(圓環體), capsule(膠囊體), tube(管道) 第二排從左起:pyramid(四棱錐), box(長方體), sphere(球體), cylinder(圓柱體)
// 1.顯示統計數據
scnView.showsStatistics = true
// 2.打開相機控制
scnView.allowsCameraControl = true
// 3.自動啓用默認光源
scnView.autoenablesDefaultLighting = true
複製代碼
1.showsStatistics在底部顯示一個實時的統計條,左側+號點擊可展開;
2.allowsCameraControl容許使用簡單手勢控制相機
-單指滑動:旋轉相機;
-雙指滑動:移動相機;
-雙指捏合:縮放;
-雙擊:若是有兩個相機則切換,一個相機則返回原始狀態;
3.autoenablesDefaultLighting建立一個通用的全方向光源;
fps:幀率,每秒渲染的畫面數
◆:每幀畫面渲染的總物體數,多光源照射同一物體時會渲染屢次
▲:每幀畫面渲染的多邊形總數量
✸:可見的光源總數(影響物體的光源), Scene Kit推薦不要同時使用3個以上光源