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

j13ufse2  于 2023-09-30  发布在  Swift
关注(0)|答案(2)|浏览(102)

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

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

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

7cwmlq89

7cwmlq891#

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.background.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.
还应该说几句关于弃用的预配置SceneKit的**SCNP**文件及其替换。
如果你想设置像3D火灾这样的现象,最好的方法是在Scene graph中以非编程方式完成。为获得更好的效果,请使用具有不同参数的2个或3个粒子系统对象。
为了更好地了解如何设置基于png samples(源)的3D火灾,打开Apple Motion应用程序的场景,应用粒子发射器并选择检查器选项卡。然后,尝试在SceneKit的场景图中实现具有相同外观的火灾。

g6ll5ycj

g6ll5ycj2#

出于某种未知原因,Apple从最近的XCode版本中删除了SCNP(SceneKit粒子文件)模板。
您有以下选项:

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

像这样:

let myParticleSystem = SCNParticleSystem()

然后在示例中配置所需的所有内容:myParticleSystem

相关问题