【问题标题】:How to use SpriteKit Particle File in a project developed with SceneKit?如何在使用 SceneKit 开发的项目中使用 SpriteKit 粒子文件?
【发布时间】:2021-05-27 12:33:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: swift sprite-kit scenekit arkit


    【解决方案1】:

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

    您有以下选择:

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

    • 完全在代码中创建您的粒子系统。

    像这样:

    let myParticleSystem = SCNParticleSystem()
    

    然后你在实例中配置你想要的一切:myParticleSystem

    【讨论】:

    • 这是一个简单的方法。我找到了一个scnp 文件并完成了我的演示。
    【解决方案2】:

    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 文件及其替换读取 HERE

    如果你想设置像 3D 火焰这样的现象,最好的方法是在Scene graph 中进行。为了获得更好的结果,请使用 2 或 3 个具有不同参数的粒子系统对象。

    为了更好地了解如何根据png samples(来源)设置 3D 火焰,请打开 Apple Motion 5 应用场景并点击 Inspector 按钮。

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

    【讨论】:

    • 感谢您的回答。粒子会只出现在这个平面上吗?如果是这样,那不是我想要的。例如,我想看到真正在 3d 世界中燃烧的火焰,而不仅仅是在一个平面上。也许我仍然应该尝试使用 SceneKit 粒子文件?
    • 是的,如果你想要3D fire 效果 - 使用 SceneKit 粒子。很明显。您可以借助场景图(使用粒子系统元素)以编程方式或在 UI 中设置 3D 火焰。
    猜你喜欢
    • 2015-02-14
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2014-01-10
    相关资源
    最近更新 更多