首页 > 解决方案 > 在 SCNPlane (ARKit) 上漫反射动画 SpriteKit 场景

问题描述

tl;博士我正在尝试在 ARKit 中的平面(即桌子)上为 SKScene 设置动画。我可以通过用它对 SCNPlane 进行纹理化来让 SKScene 出现,但它没有动画。我怎样才能让动画工作?

你好,

我正在尝试制作一个 ARKit 游戏,它本质上只是一个在 3D 世界中锚定的平面上渲染的 2D 游戏。我将游戏作为 SKScene 对象。通常在 ARKit 中渲染 SKScene 时,我会创建一个 SCNPlane 并将材质设置为 SCNMaterial 并扩散 SKScene。这就是我当前的代码的样子(在我的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 = falsesceneDidLoad()SKScene。这使update(_:)函数运行,但 SCNPlane 上的纹理永远不会更新,因此 SKScene 保持其初始外观。当 SKScene 在 UIViewController 中自行运行时,它可以正常工作。

有谁知道我怎样才能让动画 SKScene 在 SCNPlane 上制作动画?归根结底,我只希望 SKScene 在 ARKit 中的平面(即桌子)上进行动画处理,因此任何替代方法都可以使用。

标签: swiftsprite-kitscenekitarkit

解决方案


Scenekit 视图运行自己的渲染循环,它不会更新/渲染那些没有通过动作或物理运动移动的节点。

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

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


推荐阅读