我想在SceneKit中显示3D模型,但也想在模型中放置一些2D形状(例如,可以点击的圆圈触发交互)。
实现这一目标的最佳方法是什么?
它应该如何:
不成功的方法:使用具有小高度的常规SCNNode
,但这不像2D图形(透视变化)
编辑:
现在我将圆圈作为精灵套件节点添加到叠加视图
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给了我非常奇怪的结果,即使节点显示在屏幕中间,也有返回的屏幕范围......
答案 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