SCNNode

学习目标

理解游戏场景和节点的概念

你必须知道的概念  场景

简单的说,就是把人物,地图,道具等放在一个空间里,组成一个大的环境,这个大的环境就被称为场景!

节点

在SceneKit 节点是个抽象的概念,节是个看不见,摸不到的东西,没有几何形状,但是它有位置,以及自身坐标系。通俗的讲,在场景中创建一个添加节点后,你就可以在这个节点上放我们游戏元素了,比如人物模型,灯光,摄像机等等! 节点上可以添加节点的,每个节点都有自身坐标系。如图,我们把节点2添加到节点1上去。

实战目标

  1. 掌握如何添加节点到场景中
  2. 给节点绑定几何物体
  3. 给节点添加节点
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)
}

results matching ""

    No results matching ""