如何在使用SceneKit开发的项目中使用SpriteKit粒子文件?

3

我正在使用SceneKit制作一个简单的ARKit应用程序,并需要添加一些粒子效果。通常情况下,我可以创建一个SceneKit粒子文件,设计一些粒子效果并像这样使用它

let smoke = SCNParticleSystem(named: "xxx.scnp", inDirectory: nil)!
let hole = SCNNode()
hole.addParticleSystem(smoke)

但是自从 Xcode12 以后,我只能创建一个后缀为 .sks 的 SpritKit 粒子文件。上面的代码不能再使用了。我是 ARKit 的新手,请问有谁能告诉我如何将粒子效果集成到我的 SceneKit 项目中呢?非常感谢。

2个回答

4

SpriteKit粒子实现

如果你想在3D场景中使用2D粒子,有两种常规方法可以在SceneKit中显示SpriteKit场景。第一种方法是将SKScene分配为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火焰等现象,最好在场景图中实现。为了获得更好的效果,可以使用2或3个具有不同参数的粒子系统对象。

为了更好地理解如何基于png样本(源)设置3D火焰,请打开Apple Motion 5应用程序场景并单击检查器按钮。

enter image description here

然后,尝试在SceneKit的场景图中实现相同外观的火焰效果。


谢谢你的回答。这些粒子只会出现在这个平面上吗?如果是的话,那不是我想要的。举个例子,我希望在3D世界中真实地看到火焰燃烧,而不仅仅是在一个单一的平面上。也许我应该尝试使用SceneKit的粒子文件? - undefined
是的,如果你想要“3D火焰”效果-使用SceneKit粒子。这是显而易见的。你可以编程或在UI中设置3D火焰,借助场景图(使用粒子系统元素)。 - undefined
在这个链接中,你可以找到关于如何在使用SceneKit开发的项目中使用SpriteKit粒子文件的问题的解答:https://dev59.com/uV0KtIcB2Jgan1znB9uP:~:text=particleSystem.particleColor%20%3D%20.green 另外,你还可以通过添加以下代码来设置粒子系统的发射形状:<targetNode>.geometry - undefined

0

由于某种未知原因,Apple在最新版的XCode中删除了SCNP(SceneKit粒子文件)模板。

您有以下选择:

  • 从Apple或GitHub下载包含一个或多个.scnp文件的任何示例代码项目。从那里获取文件并将其实现到您的AR项目中。您仍然可以像往常一样在XCode中编辑该文件。(粒子系统编辑器)

  • 完全使用代码创建您的粒子系统。

就像这样:

let myParticleSystem = SCNParticleSystem()

然后您可以在实例myParticleSystem中配置所需的所有内容。


1
这是一个简单的方法。我找到了一个scnp文件并完成了我的演示。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接