首页 文章

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

提问于
浏览
1

tl; dr 我正在尝试在 ARKit(i.e.一张桌子)的平面上为 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 上时会暂停场景。因此,我将self.isPaused = false添加到 SKScene 的sceneDidLoad()中。这样就可以运行update(_:)函数,但是 SCNPlane 上的纹理永远不会更新,因此 SKScene 保持其初始外观。当 SKScene 在 UIViewController 中单独运行时,它可以正常工作。

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

1 回答

  • 0

    Scenekit 视图运行其自己的渲染循环,并且不会 update/render 未通过动作或物理运动移动的节点。

    Scenekit 会自动决定何时 update/render 节点,何时不 update/render。

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

相关问题