我正在使用SceneKit进行游戏,其整个游戏的大小可以更改,即所有节点链接到的参考节点(GameRootNode)的大小可以更改,然后所有节点的大小在发生时相应地更改
关于粒子系统,它变得棘手。到目前为止,我必须为游戏可以具有的每个极限尺寸范围创建一个粒子系统,并利用粒子系统的属性来调整效果。结果不好。
所以我尝试用2种方法缩放粒子系统:
将BulletNode
附加到GameRootNode
,将粒子系统附加到BulletNode
,然后缩放GameRootNode
(如下所述)
缩放GameRootNode
,创建BulletNode
,将粒子系统附加到BulletNode
,然后将BulletNode
缩放到与{{1 }}
在两种情况下,粒子系统都保持其原始大小(即SceneKit编辑器中定义的大小)
有没有办法缩放粒子系统?
GameRootNode
答案 0 :(得分:0)
缩放粒子系统的方法有两种:“形状”的DATETIME
,Width
,Height
和粒子系统的Length
,X
,{ {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 rate
和scale
。您决定将(x:1, y:1, z:1)
增加到Birth rate = 50
。
要保持相同的粒子密度,必须增加
scale
属性(例如,如果比例因子为5,则增加125倍)。
希望这会有所帮助。