Swift Playground 中的 SceneKit 粒子系统

Posted

技术标签:

【中文标题】Swift Playground 中的 SceneKit 粒子系统【英文标题】:SceneKit Particle Systems in a Swift Playground 【发布时间】:2019-05-28 10:32:36 【问题描述】:

通常我使用这样的文件初始化器来实例化 SCNParticleSystems:

var stars = SCNParticleSystem(named: "Stars.sncp", inDirectory: nil)

然而,这个项目需要一个 Swift Playground,当我尝试将该 init 函数与存储在 Playground 的 Resources 文件夹中的系统一起使用时,它返回 nil(即使我将指定的目录更改为“Resources”或“/Resources”等) . ).

Playground 资源路径的处理方式是否与普通应用不同,还是我犯了一个非常愚蠢的文件命名错误?

【问题讨论】:

【参考方案1】:

在 Xcode 11 及更高版本中,没有预配置的 .scnp 粒子系统文件。相反,您可以使用直接来自 Xcode 库的 Particle System 对象。

或者,像往常一样,您可以在 Xcode Playground 中以编程方式创建粒子系统。


关于 iPad 版 Swift Playgrounds read here。


这是一个代码:

import PlaygroundSupport
import SceneKit

let rectangle = CGRect(x: 0, y: 0, width: 1000, height: 200)
var sceneView = SCNView(frame: rectangle)

var scene = SCNScene()
sceneView.scene = scene
sceneView.backgroundColor = .black

let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position.z = 70
sceneView.scene!.rootNode.addChildNode(cameraNode)

let particleSystem = SCNParticleSystem()
particleSystem.birthRate = 500
particleSystem.particleLifeSpan = 0.5
particleSystem.particleColor = .systemIndigo
particleSystem.speedFactor = 7
particleSystem.emittingDirection = SCNVector3(1,1,1)
particleSystem.emitterShape = .some(SCNSphere(radius: 15))

let particlesNode = SCNNode()
particlesNode.scale = SCNVector3(2,2,2)
particlesNode.addParticleSystem(particleSystem)
sceneView.scene!.rootNode.addChildNode(particlesNode)

PlaygroundPage.current.liveView = sceneView

【讨论】:

【参考方案2】:

我认为您在文件扩展名方面犯了一个错误。它是 .scnp 而不是 .sncp

尝试不带任何扩展名 -

var stars =  SCNParticleSystem(named: "Stars", inDirectory: nil)

或尝试使用正确的扩展名 -

var stars =  SCNParticleSystem(named: "Stars.scnp", inDirectory: nil)

【讨论】:

好吧,那真是太愚蠢了。非常感谢您花时间浪费在这个问题上!

以上是关于Swift Playground 中的 SceneKit 粒子系统的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 Playground 不会使用 Firebase

如何将数据从 Playground 页面传递到 Swift Playgrounds 中的另一个 Playground 页面?

如何使用 Swift 3 Playground 读取 Resources 目录中的文本文件?

在 Playground 中的 swift 3 中添加延迟似乎不准确

Swift Playground 中的 NSTimer.scheduledTimerWithTimeInterval

Swift Playground 4:导入 Swift 包