Я играю в игру со SceneKit, для которой может измениться размер всей игры, то есть размер эталонного узла (GameRootNode), с которым связаны все узлы, может измениться, тогда размер всех узлов соответственно изменится, когда это произойдет.
Когда дело доходит до системы частиц, она становится сложной.До сих пор мне приходилось создавать систему частиц для каждого экстремума диапазона размеров, который может иметь игра, и играть со свойствами системы частиц, чтобы настроить эффект.Результат не очень хороший.
Поэтому я попытался масштабировать систему частиц с помощью двух подходов:
присоединить BulletNode
к GameRootNode
, прикрепитьсистема частиц до BulletNode
, затем масштабируйте GameRootNode
(как описано ниже)
масштабируйте GameRootNode
, создайте BulletNode
, присоедините систему частиц к BulletNode
затем масштабируйте BulletNode
до того же масштаба, что и GameRootNode
В обоих случаях система частиц остается с ее первоначальным размером (то есть тем, который определен в редакторе 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)