SceneKit: остановить анимацию системы частиц - PullRequest
0 голосов
/ 03 октября 2019

Я использую SCNPArticleSystem, чтобы создать дымку вокруг объекта. После того, как дымка была создана, я не хочу, чтобы она менялась дальше.

Я замечаю, что анимация системы частиц продолжается после того, как была достигнута эмиссия. Это приводит к тому, что приложение использует много ресурсов ЦП.

Есть ли способ заморозить систему частиц, как она существует после эмиссии и не имеет дальнейших ударов анимации?

Я пытался вызвать:

particleSyste.removeAllAnimations()

Но это не помогает. Вот как я настроил систему частиц

    let particleSystem = SCNParticleSystem()

    particleSystem.particleImage = UIImage(named: "smoke")
    particleSystem.particleColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.005)
    particleSystem.birthRate = 10000;
    particleSystem.birthDirection = .random
    particleSystem.birthLocation = .volume
    particleSystem.particleLifeSpan = CGFloat.greatestFiniteMagnitude
    particleSystem.particleSize = 2
    particleSystem.particleSizeVariation = 0.2
    particleSystem.particleAngleVariation = 360
    particleSystem.blendMode = .additive
    particleSystem.orientationMode = .free
    particleSystem.emissionDuration = 1
    particleSystem.loops = false
    particleSystem.warmupDuration = 2
    particleSystem.isLocal = true
    particleSystem.stretchFactor = 1.5

    let particleSystemGeometry = SCNCylinder(radius: 0.85 * GAL_IMAGE_WIDTH_IN_LIGHT_YEARS * sceneScale / 2, height: 100 * sceneScale)
    particleSystem.emitterShape = particleSystemGeometry
    particleSystemNode = SCNNode(geometry: particleSystemGeometry)
    particleSystemNode.addParticleSystem(particleSystem)
    particleSystemNode.pivot = SCNMatrix4MakeRotation(Float.pi / 2, 1, 0, 0)
    particleSystemNode.name = "ParticleNode"

    scene.rootNode.addChildNode(particleSystemNode)

Буду признателен за любые предложения.

1 Ответ

0 голосов
/ 06 октября 2019

Чтобы ответить на ваш вопрос, нет ... Я не думаю, что есть способ заморозить его в его текущем состоянии. Для сцены есть компонент тумана, но я не думаю, что это то, о чем вы спрашиваете.

Система частиц хочет идти своим ходом, основываясь на поведении, которое вы ей даете. Одна мысль будет заключаться в том, чтобы сделать это непрерывно, уменьшить скорость рождения, 0 разогрева и длительность и уменьшить размер частиц.

Что-то вроде: birthRate <100, warmupDuration = 0, размер частиц 0,15, частицаLifeSpan <10 секунд, длительность emmisionDuration 3,5 </p>

Так что ... N рождаемости происходят в течение 3,5 секунд и длятся в течение <10 секунд, чтобы дать ему некоторый остаток. </p>

Я использую аналогичные настройки для следа дыма, но если вы установите желаемые векторы для направления, я «думаю», что это произведет что-то рядом с тем, что вы ищете.

...