将动画的SpriteKit场景扩散到SCNPlane(ARKit)上

时间:2018-07-13 15:52:10

标签: swift sprite-kit scenekit arkit

tl; dr我正在尝试在ARKit(即表格)中的平面上为SKScene设置动画。通过使用SCNPlane对其进行纹理化,可以使SKScene出现,但是它没有动画。如何使动画起作用?

嗨,

我正在尝试制作ARKit游戏,该游戏实质上只是在锚定于3D世界中的飞机上渲染的2D游戏。我将游戏作为SKScene对象。通常,在ARKit中渲染SKScene时,我会创建一个SCNPlane并将材质设置为散布了SKScene的SCNMaterial。这就是我当前的代码(在我的renderer(_:didAdd:for:)中:

    guard let scene = SKScene(fileNamed: "GameScene") else { return }

    let scnMaterial = SCNMaterial()

    scnMaterial.diffuse.contents = scene

    let plane = SCNPlane(width: 0.8, height: 0.6)

    plane.firstMaterial = scnMaterial

    let planeNode = SCNNode(geometry: plane)

这使SKScene很好,但是从未调用update(_:)函数。经过研究,我发现将SKScene扩散到SCNMaterial上时会暂停场景。因此,我在SKScene的self.isPaused = false中添加了sceneDidLoad()。这样可以运行update(_:)函数,但是SCNPlane上的纹理从不更新,因此SKScene保持其初始外观。当SKScene在UIViewController中单独运行时,它可以正常工作。

有人知道我如何获得动画SKScene在SCNPlane上进行动画处理吗?归根结底,我只想让SKScene在ARKit中的平面(即桌子)上进行动画处理,因此任何其他方法都可以使用。

1 个答案:

答案 0 :(得分:0)

Scenekit视图运行自己的渲染循环 并且不会更新/渲染未因动作或物理运动而移动的那些节点。

Scenekit自动决定何时更新/渲染节点,何时不更新。

尝试通过一些移动将连续SCNAction或CAAnimation应用于SCNPlane节点,并且漫反射属性动画应该起作用。