Swift 如何在使用SceneKit开发的项目中使用SpriteKit粒子文件?
我正在用SceneKit制作一个简单的ARKit应用程序,需要添加一些粒子效果。通常我可以创建一个SceneKit粒子文件,设计一些粒子效果,然后像这样使用它Swift 如何在使用SceneKit开发的项目中使用SpriteKit粒子文件?,swift,sprite-kit,scenekit,arkit,Swift,Sprite Kit,Scenekit,Arkit,我正在用SceneKit制作一个简单的ARKit应用程序,需要添加一些粒子效果。通常我可以创建一个SceneKit粒子文件,设计一些粒子效果,然后像这样使用它 let smoke=SCNParticleSystem(名为:“xxx.scnp”,目录:nil)! let hole=SCNNode() 孔。添加微粒系统(烟雾) 但从Xcode12开始,我只能创建后缀为.sks的SpritKit粒子文件。上面的代码无法再使用此文件。我是ARKit的新手。谁能告诉我如何将粒子效果集成到我的SceneK
let smoke=SCNParticleSystem(名为:“xxx.scnp”,目录:nil)!
let hole=SCNNode()
孔。添加微粒系统(烟雾)
但从Xcode12开始,我只能创建后缀为
.sks
的SpritKit粒子文件。上面的代码无法再使用此文件。我是ARKit的新手。谁能告诉我如何将粒子效果集成到我的SceneKit项目中?非常感谢。不知什么原因,苹果从最新的XCode版本中删除了SCNP(SceneKit粒子文件)模板
您有以下选项:
- 从Apple或GitHub下载包含一个或多个.scnp文件的任何示例代码项目。从那里获取文件并将其实现到AR项目中。您仍然可以像往常一样在XCode中编辑文件。(粒子系统编辑器)
- 完全在代码中创建粒子系统
let myParticleSystem = SCNParticleSystem()
然后在实例中配置所需的一切:myParticleSystemSpriteKit粒子实现
如果您想在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)
附言
关于弃用的预配置SCNP文件及其替换读取
如果要设置3D fire等现象,最好的方法是在场景图中进行设置。为了获得更好的结果,请使用具有不同参数的2个或3个粒子系统对象
为了更好地理解如何基于png示例设置3D fire
(源代码),请打开Apple Motion 5应用程序场景并单击Inspector按钮
然后,尝试在SceneKit的场景图中实现具有相同外观的火灾。谢谢您的回答。粒子是否仅出现在此平面上?如果是这样,那就不是我想要的。例如,我希望看到火焰在3d世界中燃烧,而不仅仅是在一个平面上燃烧。也许我还是应该尝试使用SceneKit粒子文件?是的,如果您想要3D fire
效果,请使用SceneKit粒子。很明显。您可以通过编程或在UI中,借助场景图(使用粒子系统元素)设置3D fire。这是一种简单的方法。我找到了一个scnp
文件并完成了演示。