swift - 在 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 = false
了sceneDidLoad()
SKScene。这使update(_:)
函数运行,但 SCNPlane 上的纹理永远不会更新,因此 SKScene 保持其初始外观。当 SKScene 在 UIViewController 中自行运行时,它可以正常工作。
有谁知道我怎样才能让动画 SKScene 在 SCNPlane 上制作动画?归根结底,我只希望 SKScene 在 ARKit 中的平面(即桌子)上进行动画处理,因此任何替代方法都可以使用。
解决方案
Scenekit 视图运行自己的渲染循环,它不会更新/渲染那些没有通过动作或物理运动移动的节点。
Scenekit 自动决定何时更新/渲染节点以及何时不更新。
尝试通过一些运动将连续的 SCNAction 或 CAAnimation 应用于您的 SCNPlane 节点,并且漫反射属性动画应该可以工作。
推荐阅读
- reactjs - 对象作为反应子无效(react-native)
- interrupt - STM32 SPI在使用中断时丢弃数据
- php - 在woocommerce中将任何产品添加到购物车后,如何立即删除客户端浏览器上的“PHPSESSID”cookie?
- swift - Swift 和 Cloud Firestore 事务 - getDocuments?
- java - Hibernate Envers - 请求更改对象列表
- c++ - c++ 中的汇编内联(float 和 _cdecl)
- javascript - 诗浓中的 spyOn.and.callFake 是什么?
- python-2.7 - Python MySQLdb 打印表 A 中不在表 B 中的行
- spring-boot-admin - 需要更新 Spring-boot-admin UI url
- c - 如何为 print() 编写 Python 包装器?