SCNNode
学习目标
理解游戏场景和节点的概念
你必须知道的概念  场景
简单的说,就是把人物,地图,道具等放在一个空间里,组成一个大的环境,这个大的环境就被称为场景!
节点
在SceneKit 节点是个抽象的概念,节是个看不见,摸不到的东西,没有几何形状,但是它有位置,以及自身坐标系。通俗的讲,在场景中创建一个添加节点后,你就可以在这个节点上放我们游戏元素了,比如人物模型,灯光,摄像机等等! 节点上可以添加节点的,每个节点都有自身坐标系。如图,我们把节点2添加到节点1上去。
实战目标
- 掌握如何添加节点到场景中
- 给节点绑定几何物体
- 给节点添加节点
import UIKit
import SceneKit
class Test4VC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
setup()
}
func setup() {
let scnView = SCNView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
scnView.center = CGPoint(x: view.bounds.midX, y: view.bounds.midY)
scnView.backgroundColor = UIColor.black
view.addSubview(scnView)
scnView.allowsCameraControl = true
scnView.antialiasingMode = .multisampling4X
let scene = SCNScene()
scnView.scene = scene
// 创建一个球体几何绑定到节点上去
let shpere = SCNSphere(radius: 10)
// 创建节点,添加到scene的根节点上
let node = SCNNode(geometry: shpere)
node.geometry?.firstMaterial?.diffuse.contents = "art.scnassets/1.jpg"
scnView.scene?.rootNode.addChildNode(node)
// 创建子节点 给子节点添加几何形状
let childNode = SCNNode()
// 设置节点的位置
childNode.position = SCNVector3Make(-10, -20, 0)
// 设置几何形状,我们选择立体字体
let text = SCNText(string: "Apple", extrusionDepth: 0.5)
// 给几点绑定几何物体
childNode.geometry = text
node.addChildNode(childNode)
}
}
SCNText的SCNNode居中
// We must pivot the text so that it is centered at 0.5, 0.5
var minVec = SCNVector3Zero
var maxVec = SCNVector3Zero
if labelNode.__getBoundingBoxMin(&minVec, max: &maxVec) {
let distance = SCNVector3(
x: maxVec.x - minVec.x,
y: maxVec.y - minVec.y,
z: maxVec.z - minVec.z)
labelNode.pivot = SCNMatrix4MakeTranslation(distance.x / 2, distance.y / 2, distance.z / 2)
}