认识SceneKit

作者: 光明程辉 | 来源:发表于2017-10-26 20:04 被阅读72次

    1、创建一个scene
    Scene Kit 内建了几种简单的几何模型,如盒子、球体、平面、圆锥体等,但对于游戏来说,一般都会从文件中加载3D模型。

    a、如果一个从文件里加载的场景可以全部显示时,将其设置成 SCNView 的 scene 就好了;

    // Create a new scene
    let scene = SCNScene(named: "art.scnassets/SceneKitScene.scn")!

    b、如果加载的场景文件中包含了多个对象,只有一部分对象要显示在屏幕上时,就可以通过名字找到这个对象,再手动加载到 view 上: (有点像Unity 获Cocos2d)

    if let knight = chessPieces.rootNode.childNodeWithName("Knight", recursively: true) {
    sceneView.scene?.rootNode.addChildNode(knight)
    }

    认识一下节点.png

    addChildNode(_:)

    insertChildNode(_: atIndex:)

    removeFromParentNode()

    如果想在一个Node下拥有多个“马”的话,直接使用copy 或者clone,这样你的材质模型都是一模一样的。如果你想拥有不同颜色的的“马”,材质改变就可以了,那就意味着你要copy一个模型对象,单独附上你的不同的材质。

    光照

    Scene Kit 中完全都是动态光照,使用起来一般会很简单。它提供四种类型的光照:环境光、定向光源、点光源和聚光灯。 ambient, directional, omnidirectional (point lights), and spotlights.

    let spot = SCNLight()
    spot.type = SCNLightTypeSpot
    spot.castsShadow = true

    let spotNode = SCNNode()
    spotNode.light = spot
    spotNode.position = SCNVector3(x: 4, y: 7, z: 6)

    let lookAt = SCNLookAtConstraint(target: knight)
    spotNode.constraints = [lookAt]

    光照效果如下:

    spinning-fbe28377.gif

    动画

    Scene Kit 的动画更加简单,创建一个 CAAnimation 对象,并指定一个 key path (甚至可以 "position.x") ,然后向一个对象施加这个动画,就可以了。

    let move = CABasicAnimation(keyPath: "position.x")
    move.byValue = 10
    move.duration = 1.0
    knight.addAnimation(move, forKey: "slide right")

    有时间会跟新。。。。

    相关文章

      网友评论

        本文标题:认识SceneKit

        本文链接:https://www.haomeiwen.com/subject/mhhkpxtx.html