将2D Shape添加到SceneKit

时间:2018-02-08 16:43:32

标签: ios swift xcode scenekit

我想在SceneKit中显示3D模型,但也想在模型中放置一些2D形状(例如,可以点击的圆圈触发交互)。

实现这一目标的最佳方法是什么?

它应该如何:

enter image description here

不成功的方法:使用具有小高度的常规SCNNode,但这不像2D图形(透视变化)

enter image description here

编辑:

  • 现在我将圆圈作为精灵套件节点添加到叠加视图

    sceneView.overlaySKScene = SKScene.init(size: sceneView.frame.size)
    sceneView.overlaySKScene?.addChild(circle)
    
  • 我还尝试获取相应节点的屏幕坐标,我想在前面显示SpriteKit圆圈:

    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
    
        let screenPoint = sceneView.projectPoint(interactionNode!.position)
    
        print(screenPoint)
    
        circle.position = CGPoint.init(x: CGFloat(screenPoint.x), y: CGFloat(screenPoint.y))
    

    }

然而,sceneView.projectPoint给了我非常奇怪的结果,即使节点显示在屏幕中间,也有返回的屏幕范围......

1 个答案:

答案 0 :(得分:1)

您想使用overlaySKScene,它允许您在"之上放置(执行)2D Spritekit内容"你的Scenekit场景。这是我在我的应用中如何做到这一点:

首先在HUD中定义您想要的Spritekit内容:

class HUD: SKScene {
var shields: SKShapeNode(imageNamed: "shieldGrid")
var crosshairs = SKSpriteNode(imageNamed: "xenonHUD")
public var computerStatus = SKLabelNode()
public var enemyIndicator = SKLabelNode()

func shipHud.flashAlert( alert: String) {
   computerStatus.text = alert
}

然后,在主视图控制器(您实例化SceneView)中,将此类作为场景的概述,并从那里控制它:

class MyGameViewController: UIViewController, SCNPhysicsContactDelegate, SCNSceneRendererDelegate {
var scnView: SCNView! 
// setup HUD
    shipHud = HUD(size: self.view.bounds.size)
    scnView.overlaySKScene = shipHud
    shipHud.flashAlert("Oh My God!")

}

使用overlaySKScene

Mixed SceneKit and Spritekit Content using overlaySKScene混合SceneKit和Spritekit内容