【问题标题】:Animating a light in SceneKit在 SceneKit 中为灯光设置动画
【发布时间】:2018-01-29 18:30:52
【问题描述】:

我有一个(Omni 类型的)灯,我希望它有点动画。更准确地说,我想模仿文件中的光,所以我希望它是attenuationStartDistance 来更改值,color 也是如此。那么,有什么方法可以在光上运行这样的序列,或者我必须找到一个小技巧来做到这一点?

【问题讨论】:

    标签: swift scenekit lighting


    【解决方案1】:

    查看文档:

    attenuationStartDistance: 距离强度开始减弱的光源的距离。动画。

    ...

    您可以动画更改此属性的值。见Animating SceneKit Content

    对于连续动画,您可以这样做:

    let flicker = CABasicAnimation(keyPath: "light.attenuationStartDistance")
    flicker.fromValue = 100
    flicker.toValue = 110
    flicker.autoreverses = true
    flicker.repeatCount = .infinity
    lightNode.addAnimation(flicker, forKey: nil)
    

    【讨论】:

      【解决方案2】:

      更现代的方法是使用自定义SCNAction

      let flickerUp = SCNAction.customAction(duration: 1) { (node, _) in
          node.light?.attenuationStartDistance = 110
      }
      
      let flickerDown = SCNAction.customAction(duration: 1) { (node, _) in
          node.light?.attenuationStartDistance = 100
      }
      
      let repeat = SCNAction.repeatForever(SCNAction.sequence([flickerUp, flickerDown]))
      node.runAction(repeat)
      

      【讨论】:

        猜你喜欢
        • 2015-02-04
        • 1970-01-01
        • 2014-10-07
        • 2021-12-21
        • 2020-12-13
        • 1970-01-01
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多