在SceneKit中缩放粒子系统

时间:2018-10-24 18:24:10

标签: swift scenekit particle-system scnnode

我正在使用SceneKit进行游戏,其整个游戏的大小可以更改,即所有节点链接到的参考节点(GameRootNode)的大小可以更改,然后所有节点的大小在发生时相应地更改

关于粒子系统,它变得棘手。到目前为止,我必须为游戏可以具有的每个极限尺寸范围创建一个粒子系统,并利用粒子系统的属性来调整效果。结果不好。

所以我尝试用2种方法缩放粒子系统:

  • BulletNode附加到GameRootNode,将粒子系统附加到BulletNode,然后缩放GameRootNode(如下所述)

    < / li>
  • 缩放GameRootNode,创建BulletNode,将粒子系统附加到BulletNode,然后将BulletNode缩放到与{{1 }}

在两种情况下,粒子系统都保持其原始大小(即SceneKit编辑器中定义的大小)

有没有办法缩放粒子系统?

GameRootNode

1 个答案:

答案 0 :(得分:0)

缩放粒子系统的方法有两种:“形状”的DATETIMEWidthHeight和粒子系统的LengthX,{ {1}}规模。

这是一个示例,您可以使用SCNAction缩放粒子系统:

Y

按比例放大粒子系统时,应相应增加Z属性。例如,您的override func viewDidLoad() { super.viewDidLoad() let scene = SCNScene(named: "art.scnassets/myScene.scn")! //....................................................... let particleSystem = SCNParticleSystem() particleSystem.emitterShape = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0) particleSystem.birthRate = 50 particleSystem.particleSize = 0.05 particleSystem.stretchFactor = 2 particleSystem.particleLifeSpan = 3 particleSystem.particleVelocity = 10 let psNode = SCNNode() psNode.addParticleSystem(particleSystem) psNode.scale = SCNVector3(1, 1, 1) let action = SCNAction.sequence([SCNAction.scale(by: 5, duration: 10)]) psNode.runAction(action) scene.rootNode.addChildNode(psNode) } Birth ratescale。您决定将(x:1, y:1, z:1)增加到Birth rate = 50

  

要保持相同的粒子密度,必须增加scale属性(例如,如果比例因子为5,则增加125倍)。

希望这会有所帮助。