gpt4 book ai didi

swift - 在 SceneKit 中缩放粒子系统

转载 作者:行者123 更新时间:2023-11-28 07:37:47 28 4
gpt4 key购买 nike

我正在用 SceneKit 做一个游戏,整个游戏的大小可以改变,即所有节点链接到的引用节点 (GameRootNode) 的大小可以改变,然后所有节点的大小在它发生时相应地改变.

谈到粒子系统,它变得越来越棘手。到目前为止,我必须为游戏可以拥有的每个极端尺寸范围做一个粒子系统,并使用粒子系统的属性来调整效果。结果不好。

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

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

  • 缩放 GameRootNode,创建 BulletNode,将粒子系统附加到 BulletNode,然后缩放 BulletNodeGameRootNode

  • 的规模相同

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

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

GameRootNode = SCNNode()
let Sequence = SCNAction.sequence([SCNAction.scale(to: VCOfScene.VCPlayAR.ScalingFactor, duration: 0),
SCNAction.move(to: SCNVector3.init(-Float(kNbColonnesLevel) / 2 * Float(VCOfScene.VCPlayAR.ScalingFactor),
0,
-Float(kNbLignesLevel) / 2 * Float(VCOfScene.VCPlayAR.ScalingFactor)),
duration: 0)])
GameRootNode.runAction(Sequence)

BulletNode = SCNNode(geometry: Level3D.Bullet.geometry)
BulletNode.position = Position.PositionToVector()
BulletNode.name = ProjectileImageName + String(ProjectileID)

let BulletShape = SCNParticleSystem(named: "Fireball.scnp", inDirectory: nil)!
BulletShape.emittingDirection = DirectionBullet
BulletShape.particleColor = Character.Color

BulletNode.addParticleSystem(BulletShape)
GameRootNode.addChildNode(BulletNode)
GameRootNode.runAction(Sequence)

最佳答案

缩放粒子系统有两种方法:Shapes 的WidthHeightLength 以及粒子系统的X ,Y,Z 缩放。

这是一个如何使用 SCNAction 缩放粒子系统的示例:

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 rate 属性。例如,您的 scale(x:1, y:1, z:1)Birth rate = 50。您决定将 scale 增加到 (x:5, y:5, z:5)

In order to retain the same particles' density you have to increase Birth rate property (by 125 times, for example, if your scale factor is 5).

关于swift - 在 SceneKit 中缩放粒子系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52975697/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com