SceneKit开发的项目如何使用SpriteKit粒子文件?
How to use SpriteKit Particle File in a project developed with SceneKit?
我正在使用 SceneKit 制作一个简单的 ARKit 应用程序,需要添加一些粒子效果。通常我可以创建一个 SceneKit 粒子文件,设计一些粒子效果并像这样使用它
let smoke = SCNParticleSystem(named: "xxx.scnp", inDirectory: nil)!
let hole = SCNNode()
hole.addParticleSystem(smoke)
但是由于Xcode12,我只能创建一个后缀为.sks
的SpritKit粒子文件。上面的代码不再适用于此文件。我是 ARKit 的新手。谁能告诉我如何将粒子效果集成到我的 SceneKit 项目中?非常感谢。
由于某些未知原因,Apple 从最近的 XCode 版本中删除了 SCNP(SceneKit 粒子文件)模板。
您有以下选择:
从 Apple 或 GitHub 下载任何包含一个或多个 .scnp 文件的示例代码项目。从那里获取文件并将其实施到您的 AR 项目中。您仍然可以像往常一样在 XCode 内编辑文件。 (粒子系统编辑器)
完全在代码中创建粒子系统。
像这样:
let myParticleSystem = SCNParticleSystem()
然后你在实例中配置你想要的一切:myParticleSystem
SpriteKit 粒子实现
如果你想在 3D 场景中使用 2D 粒子,有两种常规方法可以在 SceneKit 中显示 SpriteKit 场景。第一种方法是将 SKScene 指定为 material 用于 SceneKit 的几何体:
// 2D scene
let skScene = SKScene()
guard let emitter = SKEmitterNode(fileNamed: "sparks.sks")
else { return }
emitter.position = CGPoint(x: 10, y: 25)
emitter.targetNode = skScene
skScene.addChild(emitter)
// 3D scene
let plane = SCNPlane(width: 5, height: 5)
plane.materials.first?.diffuse.contents = skScene
let planeNode = SCNNode(geometry: plane)
sceneView.scene.rootNode.addChildNode(planeNode)
第二种方式——将SKScene赋值给SceneKit的虚拟环境
sceneView.scene.lightingEnvironment.contents = skScene
SceneKit 粒子实现
在 SceneKit 中使用粒子的常规方法是其原生粒子系统:
let particleSystem = SCNParticleSystem()
particleSystem.birthRate = 50
particleSystem.particleSize = 0.5
particleSystem.particleLifeSpan = 10
particleSystem.particleColor = .green
let particlesNode = SCNNode()
particlesNode.addParticleSystem(particleSystem)
sceneView.scene.rootNode.addChildNode(particlesNode)
P. S.
关于弃用的预配置 SCNP
文件及其替换读取 .
如果你想设置像 3D 火焰这样的现象,最好的方法是在 Scene graph
中设置。为了获得更好的结果,请使用 2 或 3 个具有不同参数的粒子系统对象。
为了更好地了解如何根据 png samples
(来源)设置 3D 火焰,请打开 Apple Motion 5 应用程序场景并单击 Inspector 按钮。
然后,尝试在SceneKit的Scene graph中实现具有相同外观的火。
我正在使用 SceneKit 制作一个简单的 ARKit 应用程序,需要添加一些粒子效果。通常我可以创建一个 SceneKit 粒子文件,设计一些粒子效果并像这样使用它
let smoke = SCNParticleSystem(named: "xxx.scnp", inDirectory: nil)!
let hole = SCNNode()
hole.addParticleSystem(smoke)
但是由于Xcode12,我只能创建一个后缀为.sks
的SpritKit粒子文件。上面的代码不再适用于此文件。我是 ARKit 的新手。谁能告诉我如何将粒子效果集成到我的 SceneKit 项目中?非常感谢。
由于某些未知原因,Apple 从最近的 XCode 版本中删除了 SCNP(SceneKit 粒子文件)模板。
您有以下选择:
从 Apple 或 GitHub 下载任何包含一个或多个 .scnp 文件的示例代码项目。从那里获取文件并将其实施到您的 AR 项目中。您仍然可以像往常一样在 XCode 内编辑文件。 (粒子系统编辑器)
完全在代码中创建粒子系统。
像这样:
let myParticleSystem = SCNParticleSystem()
然后你在实例中配置你想要的一切:myParticleSystem
SpriteKit 粒子实现
如果你想在 3D 场景中使用 2D 粒子,有两种常规方法可以在 SceneKit 中显示 SpriteKit 场景。第一种方法是将 SKScene 指定为 material 用于 SceneKit 的几何体:
// 2D scene
let skScene = SKScene()
guard let emitter = SKEmitterNode(fileNamed: "sparks.sks")
else { return }
emitter.position = CGPoint(x: 10, y: 25)
emitter.targetNode = skScene
skScene.addChild(emitter)
// 3D scene
let plane = SCNPlane(width: 5, height: 5)
plane.materials.first?.diffuse.contents = skScene
let planeNode = SCNNode(geometry: plane)
sceneView.scene.rootNode.addChildNode(planeNode)
第二种方式——将SKScene赋值给SceneKit的虚拟环境
sceneView.scene.lightingEnvironment.contents = skScene
SceneKit 粒子实现
在 SceneKit 中使用粒子的常规方法是其原生粒子系统:
let particleSystem = SCNParticleSystem()
particleSystem.birthRate = 50
particleSystem.particleSize = 0.5
particleSystem.particleLifeSpan = 10
particleSystem.particleColor = .green
let particlesNode = SCNNode()
particlesNode.addParticleSystem(particleSystem)
sceneView.scene.rootNode.addChildNode(particlesNode)
P. S.
关于弃用的预配置 SCNP
文件及其替换读取
如果你想设置像 3D 火焰这样的现象,最好的方法是在 Scene graph
中设置。为了获得更好的结果,请使用 2 或 3 个具有不同参数的粒子系统对象。
为了更好地了解如何根据 png samples
(来源)设置 3D 火焰,请打开 Apple Motion 5 应用程序场景并单击 Inspector 按钮。
然后,尝试在SceneKit的Scene graph中实现具有相同外观的火。