[英]Add 2D Shape to SceneKit
我想在SceneKit中显示3D模型,但也想在模型中放置一些2D形状(例如,可以点击一个圆圈来触发交互)。
实现此目标的最佳方法是什么?
它应该是什么样的:
方法未成功:使用了常规的SCNNode
,但高度不高,但这不能用作2D图形(可能发生更改)
编辑:
现在我将圆圈添加为Sprite Kit节点到叠加视图
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给我非常奇怪的结果,即使该节点显示在屏幕中间,也有返回的屏幕外范围...
您想使用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!")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.