【问题标题】:Diffuse an animated SpriteKit Scene over an SCNPlane (ARKit)在 SCNPlane (ARKit) 上漫反射动画 SpriteKit 场景
【发布时间】:2018-12-22 01:16:45
【问题描述】:

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

嗨,

我正在尝试制作一个 ARKit 游戏,它本质上只是一个 2D 游戏,渲染在一个固定在 3D 世界中的平面上。我将游戏作为 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 = false 添加到了SKScene 的sceneDidLoad()。这使update(_:) 函数运行,但 SCNPlane 上的纹理永远不会更新,因此 SKScene 保持其初始外观。当 SKScene 在 UIViewController 中自行运行时,它可以正常工作。

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

【问题讨论】:

    标签: swift sprite-kit scenekit arkit


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 2014-08-21
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多