Swift游乐场中的SceneKit粒子系统

时间:2019-01-01 11:40:44

标签: swift scenekit swift-playground

通常,我通过使用文件初始化程序来实例化SCNParticleSystems:

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

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

Playground资源路径的处理方式与普通应用程序不同吗?还是我犯了一个真正愚蠢的文件命名错误?

2 个答案:

答案 0 :(得分:1)

在Xcode 11中,没有预先配置的.scnp粒子系统文件。相反,您可以使用直接来自Xcode库的Particle System对象。或者,您可以像往常一样在Xcode Playground中以编程方式创建粒子系统。

这是一个代码:

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

enter image description here

答案 1 :(得分:0)

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

尝试不使用任何扩展名-

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

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

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